Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在autofac中使用命名注册与MVC控制器注入集成_Asp.net Mvc_Autofac - Fatal编程技术网

Asp.net mvc 在autofac中使用命名注册与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<

我已设置autofac,以便对我的asp.net MVC控制器进行依赖项注入,如下所示:

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)
    {
         //...
    }
}