2013-06-25 46 views
0

我有一个ITestService接口。 TestService1TestService2实现ITestService。我想要的是使用TestService1 for Controller1 and TestService2 for 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)'不能从用法推断。尝试明确指定类型参数。 –

相关问题