2013-06-25 2 views
0

У меня есть интерфейс ITestService. TestService1 и TestService2 реализует ITestService. То, что я хочу, чтобы использовать TestService1 для Controller1 и TestService2 для Controller2. Как это сделать в Autofac?Autofac Регистрация различной реализации для разных контроллеров

Я использую ASP.NET MVC4.

Я попытался это один, но оно не работал

builder.RegisterType<Controller1>().WithParameter(ResolvedParameter.ForNamed<ITestService>("TestService1")).InstancePerDependency(); 
builder.RegisterType<Controller2>().WithParameter(ResolvedParameter.ForNamed<ITestService>("TestService2")).InstancePerDependency(); 

Я также попробовал этот, ни успеха

builder.RegisterType<TestService1>().Named<ITestService>("TestService1").As<ICategoryService>(); 
    builder.RegisterType<TestService2>().Named<ICategoryService>("TestService2").As<ICategoryService>(); 

    builder.RegisterType<Nop.Web.Controllers.Controller1>().WithParameter(ResolvedParameter.ForNamed<ITestService>("TestService1")); 
    builder.RegisterType<Nop.Admin.Controllers.Controller2>().WithParameter(ResolvedParameter.ForNamed<ITestService>("TestService2")); 
+0

Ваш второй пример должен работать, какое сообщение об ошибке вы получите? Единственная странность в вашем примере, которую вы иногда пишете 'ITestService' иногда' ICategoryService', но я думаю, что это просто опечатка в вашем примере ... – nemesv

ответ

0

Вы назначенные имена "TestService1" и "TestService2"? например

builder.RegisterType<TestService1>().As<ITestService1>().Named("TestService1"); 
builder.RegisterType<TestService2>().As<ITestService2>().Named("TestService2"); 
+0

Я получаю ошибку времени компиляции, когда я пытаюсь написать Service.ExtendedCategoryService, Autofac .Builder.ConcreteReflectionActivatorData, Autofac.Builder.SingleRegistrationStyle> .Named (string) 'не может быть выведен из использования. Попробуйте явно указать аргументы типа. –

Смежные вопросы