【问题标题】:Retrieving the application-wide container in web api在 web api 中检索应用程序范围的容器
【发布时间】:2015-03-20 15:56:36
【问题描述】:

我正在尝试解决基于异步事件的休息服务的问题。我有在应用程序中生成事件的服务,并且这些事件是异步处理的。我遇到的问题是,由于 autofac 的生命周期范围,我的 linq to sql 数据上下文已经被处理掉了。

我找到了一个有解决方案的网站,它涉及获取应用程序范围的容器。他是这样理解的:

var accessor = ((IContainerProviderAccessor) HttpContext.Current.ApplicationInstance);
return accessor.ContainerProvider.ApplicationContainer;

但是,我无法导入 IContainerProviderAccessor,它似乎在 autofac 的 mvc 集成程序集中。如何将这段代码翻译成 web api。

【问题讨论】:

    标签: c# c#-4.0 asp.net-web-api autofac


    【解决方案1】:

    IContainerProviderAccessor 不再受支持。 Autofac 现在使用 ASP.net MVC 的 IDependencyResolver

    如果你想访问解析器,你可以使用 ASP.net MVC 的 DependencyResolver.Current 属性。

    YourDbContext yourDbContext = DependencyResolver.Current.GetService<YourDbContext>(); 
    

    另一种解决方案是注入Func&lt;Owned&lt;YourDbContext&gt;&gt;,它将充当工厂。每次您在 API 方法中需要 DbContext 时,您都可以调用它 Autofac 将实例化一个新方法。

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多