2014-12-21 16 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