加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – OWIN服务解析使用Autofac

发布时间:2020-12-14 05:00:20 所属栏目:百科 来源:网络整理
导读:我有一个使用OWIN和Autofac的WebApi应用程序.虽然控制器和参数得到了正确解析,但我希望能够使用OwinContext.Get type解决使用Autofac注册的类型.那可能吗? 已经是setapp.UseAutofacMiddleware(容器);和config.DependencyResolver = new AutofacWebApiDepend
我有一个使用OWIN和Autofac的WebApi应用程序.虽然控制器和参数得到了正确解析,但我希望能够使用OwinContext.Get< type>解决使用Autofac注册的类型.那可能吗?

已经是setapp.UseAutofacMiddleware(容器);和config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

例如,我注册了builder.Register< IAppConfiguration>(c => new AppConfig());我想使用owinContext.Get< IAppConfiguration>()来解决它.

解决方法

没有办法获得OwinContext.Get< T>从Autofac解决问题.如果您深入了解Reflector中的Microsoft.Owin.OwinContext.Get,您将看到它完全由您在环境中注册的事物字典支持.它不是动态的,没有办法(没有创建自己的IOwinContext实现)来让它解决字典之外或依赖解析的问题.

如果您在DelegatingHandler或ApiController中,则将引用当前的HttpRequestMessage.使用message.GetDependencyScope()获取当前请求级依赖项范围以解析服务.

public HttpResponseMessage SomeControllerAction()
{
  var service = this.Request.GetDependencyScope().GetService(typeof(Service));
}

如果您有权访问HttpConfiguration,那么您可以使用HttpConfiguration.DependencyResolver来解决问题.请注意,解析程序不具有可用的每请求依赖项. Web API跟踪入站HttpRequestMessage的请求依赖范围,因此请注意该限制. There is an FAQ about per-request lifetime scope可以帮助您完成这项工作.

如果你所在的地方只有一个IOwinContext,你可能需要使用像CommonServiceLocator和associated Autofac.Extras.CommonServiceLocator这样的软件包.真的没有办法从IOwinContext获取对当前HttpConfiguration或全局容器的引用.同样,如果你走这条路线,你就不会有每个请求的依赖关系,所以要注意.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读