如何将Autofac与WepApi 2和Owin集成?
我正在使用此软件包将Autofac与我的WebApi Owin应用程序集成:
https://www.nuget.org/packages/Autofac.WebApi2.Owin
并关注这篇文章:
http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/
我在Startup.cs中的代码如下所示:
var config = new HttpConfiguration(); IContainer container = EngineContext.InitializeEngine(); var dependencyResolver = new AutofacWebApiDependencyResolver(container); config.DependencyResolver = dependencyResolver; app.UseAutofacMiddleware(container); app.UseAutofacWebApi(config); WebApiConfig.Register(config); app.UseWebApi(config);
无论我如何旋转它,重新排列代码或其他任何东西,Autofac都无法解决任何问题。 在Owin之前,我的Global.asax方法运行得很好:
protected void Application_Start() { IContainer container = EngineContext.InitializeEngine(); var dependencyResolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; GlobalConfiguration.Configure(WebApiConfig.Register); }
我错过了什么?
谢谢
好,
我想到了。 Autofac Owin集成实际上创建了一个Owin liftimescope,它可以通过整个Owin管道获得,因此可用于中间件并将此lifetimescope扩展到HttpRequestMessage。 这是标有AutofacWebRequest标记的lifetimescope。
因此,所有以前的WebApi集成代码仍然需要在应用程序启动时执行。 我包括:
var dependencyResolver = new AutofacWebApiDependencyResolver(container); config.DependencyResolver = dependencyResolver;
但错过了:
var builder = new ContainerBuilder(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
在EngineContext.Initialize方法中,该方法通过构建器执行所有注册。
在这里,您可以找到有关如何将Autofac与WebApi集成的更多信息,这显然也需要在Owin的情况下完成:
https://code.google.com/p/autofac/wiki/WebApiIntegration
我希望这很有用!
- 显示“504 Gateway Timeout error”的自定义错误
- 带有BeginCollectionItem的MVC 5动态行
- 仅当使用NetworkService时,站点才会使用ApplicationPoolIdentity在本地启动:“HTTP错误503.服务不可用”。
- GitHub提交错误:权限被拒绝致命:无法处理路径〜/ App_Data / aspnet-MyProject.mdf
- Web API中的MVC-6与MVC-5 BearerAuthentication
- MVC ViewModel示例
- 如何在IIS 8上运行应用程序时委派Windows身份validation会话?
- 身份2.1 – 未找到UserId但之前正在使用
- 当前上下文中不存在名称“DefaultAuthenticationTypes”