gpt4 book ai didi

c# - 如何获取 Autofac for WebAPI2 的容器?

转载 作者:行者123 更新时间:2023-11-30 19:57:09 25 4
gpt4 key购买 nike

在 Ninject 中,我可以使用类 WebContainerManager 获取接口(interface)所需的对象

注入(inject)定义:

 var logManager = new LogManagerAdapter(); 
container.Bind<ILogManager>().ToConstant(logManager);

注入(inject)用法:

var log = WebContainerManager.Get<ILogManager>().GetLog(typeof(WebApiApplication));

我的问题是如何在 Autofac 中做同样的事情,以获得接口(interface)所需的类?

更新 1:我使用的是 WebAPI 2,而不是 MVC。

最佳答案

如果您需要从 Autofac 本身解析的类访问 Autofac 容器,那么您可以指定对 Autofac 自动提供的 IComponentContext 的依赖。

例子:

public void SomeComponent(IComponentContext context)
{
this.context = context;
}
...
// somewhere inside SomeComponent
context.Resolve<ILogManager>();

如果您的代码在 ASP.Net 环境中运行,那么您很可能设置了它的 DependencyResolver,因此您始终可以像这样访问它:

DependencyResolver.Current.GetService<ILogManager>();

但正如其他评论中已经提到的那样,Service Locator 是一种应该避免的反模式。

为了将 autofac 容器与标准 MVC 依赖解析机制集成,您需要:

  • 安装 Autofac.Mvc5 nuget 包
  • 使用以下代码设置 DependencyResolver

    var container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(容器));

如果您不介意在您的应用程序代码中显式依赖 Autofac,您可以像使用 Ninject WebContainerManager 一样访问全局 Autofac 解析器引用:

var log = AutofacDependencyResolver.Current.Resolve<ILogManager>().GetLog(typeof(WebApiApplication));

关于c# - 如何获取 Autofac for WebAPI2 的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com