【问题标题】:Use AutoFac with Web API Controller and Multiple Contructor Parameters将 AutoFac 与 Web API 控制器和多个构造函数参数一起使用
【发布时间】: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


【解决方案1】:

使用

builder.Register(c => new SystemController(c.ResolveNamed<IResourceFactory>("ResourceFactory"), .....)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 2018-07-27
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多