У меня есть следующий код в моем приложении MVC, который отлично работает.Замок Виндзор, регистрирующий компоненты, соответствующие тем же услугам
container.Register(Component.For<CountryServiceBase>()
.ImplementedBy<CountryService>()
.LifestylePerWebRequest());
Виндзорский замок создает компонент
CountryService/CountryServiceBase
Мой контроллер получает конкретизированных объект здесь:
public class MyController : MainController
{
public CountryServiceBase CountryService {get; set;} // instantiate by Ioc : OK
Моя проблема заключается в том, что у меня есть много классов для регистрации. Таким образом, используя замок Виндзор я сделал следующее:
container.Register(
Types
.FromAssemblyNamed("mynamespace")
.BasedOn(typeof(ServiceBase<>))
.WithService.Base()
.LifestylePerWebRequest());
Виндзорский замок создает свои компоненты
CountryService/ServiceBase<Country>
CountryServiceBase/ServiceBase<Country>
Но мой MVC приложений ожидает CountryService/CountryServiceBase, и я не знаю, как указать, что замок Виндзор он может сопоставлять CountryServiceBase с CountryService, поскольку оба этих класса (один из них является абстрактным) наследует ServiceBase
Возможно ли это?
Примечание: Я опубликовал аналогичный вопрос, но мое исследование ведет к более точному, поэтому я удалил старый.
Попробуйте изменить 'public CountryServiceBase CountryService {get; set;} 'by' public ServiceBase CountryService {get; set;} ' –
Это будет работать, но в абстрактном классе CountryServiceBase у меня есть несколько объявленных методов. В противном случае это сработает. – AMS
Возможно 'BasedOn (typeof (CountryServiceBase))'? –