1

我遇到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>(); 

正确配置我失去了一些东西在这里?为什么我的构造函数注入被破坏?

任何帮助是值得欢迎的,关心!

+0

怎样的'UserService'解决? –

+0

@Sergey Shushlyapin感谢您的回复!它在控制器中使用getter setter Dependency Injection(with Unity)解决。 – InSum

+0

你可以这样做,但这是一个解决方法,因为属性注入被认为是可选的。我想''IUserRepository''是'UserService'的一个_must-have_依赖项,所以它应该通过构造函数注入来清除这个关系。 –

回答

0

有使用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>(); 
+0

这是关于我们的代码现在的样子。我添加了公共IUnitOfWorkIntranet UnitOfWork {get; } public IUserRepository UserRepository {get; }但这似乎并未解决问题。 – InSum

+0

在你的'UserService'类中是否有默认构造函数?我怀疑[Unity Dependency Resolver](https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection)可能没有正确配置。 –

+0

我不这么认为,在上面的帖子中列出了UserService类中唯一的构造函数。再次感谢迄今为止的所有努力! – InSum