2014-12-21 14 views
2

我有下面的代码,当我尝试并返回销售数据时返回null。它工作,如果我删除员工的其他构造函数,所以我认为这是一个构造函数注入问题。MVC 5 Unity构造器注入失败/返回空

我该如何处理这种注射?

库:位于一个单独的项目

public class CompanyRepository : ICompanyRepository, IDisposable 
{ 
    public CompanyRepository() 
    { 

    } 

    private readonly IEmployeeRepository _employeeRepository; 
    public CompanyRepository(IEmployeeRepository parameter) 
    { 
     _employeeRepository = parameter; 
    } 
    //fails never hits this 
    private readonly ISalesRepository _salesRepository; 
    public CompanyRepository(ISalesRepository parameter) 
    { 
     _salesRepository = parameter; 
    } 

} 

MVC 5控制器:

[HttpGet] 
public ActionResult Create() 
{ 
    //works 
    var a = _CompanyRepository.GetCompanyData(); 
    //works 
    var b = _CompanyRepository.GetEmployeeData(); 
    //fails 
    var c = _CompanyRepository.GetSalesData(); 

    //return view etc 
} 

App_Start Unity.Config

public static class UnityConfig 
{ 
    public static void RegisterComponents() 
    { 
     var container = new UnityContainer(); 

     // register all your components with the container here 
     // it is NOT necessary to register your controllers 

     container.RegisterType<ICompanyRepository, CompanyRepository>(); 
     //this one is failing 
     container.RegisterType<ICompanyRepository, CompanyRepository>(new InjectionConstructor(new ResolvedParameter<SalesRepository>())); 
     container.RegisterType<ICompanyRepository, CompanyRepository>(new InjectionConstructor(typeof(EmployeeRepository))); 


     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

    } 
} 

我只是用,但它不工作要么

container.RegisterType<ICompanyRepository, CompanyRepository>(new InjectionConstructor(typeof(SalesRepository))); 
container.RegisterType<ICompanyRepository, CompanyRepository>(new InjectionConstructor(typeof(EmployeeRepository))); 

回答

2

您应该为您的InjectionConstructor注册

container.RegisterType<ICompanyRepository, CompanyRepository>("salesRep", new InjectionConstructor(new ResolvedParameter<SalesRepository>())); 

container.RegisterType<ICompanyRepository, CompanyRepository>("employeeRep",new InjectionConstructor(new ResolvedParameter<EmployeeRepository>())); 

然后解决这样

var salesRep = container.Resolve<ICompanyRepository>("salesRep"); 

var employeeRep = container.Resolve<ICompanyRepository>("employeeRep"); 

解决的办法是改变你的构造函数

public CompanyRepository([Dependency("employeeRep")]IEmployeeRepository parameter) 

public CompanyRepository([Dependency("salesRep")]ISalesRepository parameter) 

,然后使用DependencyResolver