Gab*_*art 11 asp.net-mvc autofac
我有autofac设置来执行我的asp.net MVC控制器的依赖注入,如下所示:
System.Web.Mvc.DependencyResolver
.SetResolver(new AutofacDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,我有几个接口(比方说IFoo)的实现,我想注册为命名实例:
builder.Register<Bar>(c => new Bar()).Named<IFoo>("bar");
builder.Register<Baz>(c => new Baz()).Named<IFoo>("baz");
...
Run Code Online (Sandbox Code Playgroud)
我有几个控制器,IFoo他们的构造函数.但是每个控制器都需要不同的具体实现IFoo.我怎么能告诉autofac哪个控制器需要"bar"哪个需要"baz"?
nem*_*esv 22
您可以使用将在解析期间builder.RegisterControllers()使用的参数注册(实际上重新注册,如果您正在使用)您的控制器:
builder.RegisterType<SomeController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("bar"));
builder.RegisterType<OtherController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("baz"));
Run Code Online (Sandbox Code Playgroud)
如果控制器需要多个,IFoo您可以指定resolve参数,例如使用名称(使用一些额外的语法,但您可以将其隐藏在扩展方法后面):
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)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5639 次 |
| 最近记录: |