2014-12-21 3 views
2

У меня есть приведенный ниже код, возвращающий null при попытке и возвращении данных продаж. Он работает, если я удаляю другой конструктор для сотрудника, поэтому я считаю, что это проблема с вводом конструктора.MVC 5 Unity Constructor Injection Fail/Returning Null

Как справиться с этой инъекцией?

Repository: расположен в отдельном проекте

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