【发布时间】:2013-11-21 19:18:01
【问题描述】:
我有两个 Web API 控制器,每个控制器都具有相同的两个构造函数参数,如下所示:
public SystemController(IResourceFactory pResourceFactory, IHttpRequestProcessor pRequestProcessor)
public VersionsController(IResourceFactory pResourceFactory, IHttpRequestProcessor pRequestProcessor)
我希望能够为IHttpRequestProcessor 传递不同的实现。 AutoFac 解析器可以做到这一点吗?如果是这样,我将如何注册这些控制器。目前我只使用简单的注册调用:
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
我还尝试在进行此调用后注册每个依赖项,这是我尝试过的:
builder.Register(c => new ResourceFactory()).Named<IResourceFactory>("ResourceFactory").As<IResourceFactory>().InstancePerApiRequest();
builder.Register(c => new SystemValidator()).Named<IHttpRequestProcessor>("SystemValidator").As<IResourceFactory>().InstancePerApiRequest();
builder.Register(c => new VersionsValidator()).Named<IHttpRequestProcessor>("VersionsValidator").As<IResourceFactory>().InstancePerApiRequest();
我不确定的部分是我现在是否可以告诉 AutoFac 哪个实例用于 IHttpRequestProcessor。
感谢您的帮助。
【问题讨论】:
-
你有没有尝试单独注册这样的依赖,我会尝试一些类似的东西。 builder.Register(c => new SystemController(c.Resolve
())); -
是的,我尝试在 RegisterApiControllers 调用之后注册每个依赖项。
-
builder.Register(c => new SystemController(c.ResolveNamed
("ResourceFactory"), .....) -
太棒了!那成功了。非常感谢。
标签: asp.net asp.net-web-api autofac