Asp.net mvc 在autofac中使用命名注册与MVC控制器注入集成
我已设置autofac,以便对我的asp.net MVC控制器进行依赖项注入,如下所示:Asp.net mvc 在autofac中使用命名注册与MVC控制器注入集成,asp.net-mvc,autofac,Asp.net Mvc,Autofac,我已设置autofac,以便对我的asp.net MVC控制器进行依赖项注入,如下所示: System.Web.Mvc.DependencyResolver .SetResolver(new AutofacDependencyResolver(container)); 它工作得很好。但是,我有几个接口的实现(比如,IFoo),我想注册为命名实例: builder.Register<Bar>(c => new Bar()).Named<
System.Web.Mvc.DependencyResolver
.SetResolver(new AutofacDependencyResolver(container));
它工作得很好。但是,我有几个接口的实现(比如,IFoo
),我想注册为命名实例:
builder.Register<Bar>(c => new Bar()).Named<IFoo>("bar");
builder.Register<Baz>(c => new Baz()).Named<IFoo>("baz");
...
builder.Register(c=>newbar()).Named(“Bar”);
builder.Register(c=>newbaz())。命名为(“Baz”);
...
我有几个控制器,在它们的构造函数中采用IFoo
。但是每个控制器都需要一个不同的IFoo
具体实现。我如何告诉autofac哪个控制器需要“bar”,哪个需要“baz”您可以注册(若您使用的是builder.registerController()
),您的控制器将在解析过程中使用:
builder.RegisterType<SomeController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("bar"));
builder.RegisterType<OtherController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("baz"));
谢谢,行得通。有时一个控制器需要不止一个
IFoo
-我可以指定哪个参数名指向哪个命名实现吗?
builder.RegisterType<ComplexController>().WithParameters(new [] {
new ResolvedParameter((p,c) => p.Name == "bar",(p,c) => c.ResolveNamed<IFoo>("bar")),
new ResolvedParameter((p,c) => p.Name == "baz",(p,c) => c.ResolveNamed<IFoo>("baz"))
});
public class ComplexController: Controller
{
public ComplexController(IFoo baz, IFoo bar)
{
//...
}
}