依赖注入 - Unity构造函数注入不工作,只有getter setter注入
我遇到Unity依赖注入问题。当我尝试使用构造函数注入时,我的注入服务保持为空/空。依赖注入 - Unity构造函数注入不工作,只有getter setter注入
public UserService(IUnitOfWorkIntranet unitOfWork, IUserRepository userRepository)
{
mappingToDomainModel = IntranetMappingToDomainModel.GetMappingToDomainModelInstance;
IntranetAutoMapperConfiguration autoMapper = IntranetAutoMapperConfiguration.GetAutoMapperConfigurationInstance;
unitOfWorkIntranet = unitOfWork;
userRepository = userRepository;
}
但是,当我使用getter时,一切正常。
private IUserRepository _userRepository
{
get
{
return GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IUserRepository)) as UserRepository;
}
}
据我知道它是在UnityConfig.cs
container.RegisterType<IUnitOfWorkIntranet, UnitOfWorkIntranet>();
container.RegisterType<IUserService, UserService>();
container.RegisterType<IUserRepository, UserRepository>();
正确配置我失去了一些东西在这里?为什么我的构造函数注入被破坏?
任何帮助是值得欢迎的,关心!
有使用Unity的构造器注入的简单工作例如:
public interface IUnitOfWorkIntranet { }
public class UnitOfWorkIntranet : IUnitOfWorkIntranet{}
public interface IUserRepository { }
public class UserRepository : IUserRepository{}
public interface IUserService{}
public class UserService : IUserService
{
public IUnitOfWorkIntranet UnitOfWork { get; }
public IUserRepository UserRepository { get; }
public UserService(IUnitOfWorkIntranet unitOfWork, IUserRepository userRepository)
{
UnitOfWork = unitOfWork;
UserRepository = userRepository;
}
}
配置和解决:
var container = new UnityContainer();
container.RegisterType<IUnitOfWorkIntranet, UnitOfWorkIntranet>();
container.RegisterType<IUserService, UserService>();
container.RegisterType<IUserRepository, UserRepository>();
var service = (UserService)container.Resolve<IUserService>();
这是关于我们的代码现在的样子。我添加了公共IUnitOfWorkIntranet UnitOfWork {get; } public IUserRepository UserRepository {get; }但这似乎并未解决问题。 – InSum
在你的'UserService'类中是否有默认构造函数?我怀疑[Unity Dependency Resolver](https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection)可能没有正确配置。 –
我不这么认为,在上面的帖子中列出了UserService类中唯一的构造函数。再次感谢迄今为止的所有努力! – InSum
怎样的'UserService'解决? –
@Sergey Shushlyapin感谢您的回复!它在控制器中使用getter setter Dependency Injection(with Unity)解决。 – InSum
你可以这样做,但这是一个解决方法,因为属性注入被认为是可选的。我想''IUserRepository''是'UserService'的一个_must-have_依赖项,所以它应该通过构造函数注入来清除这个关系。 –