unity injection dependency c# asp.net-mvc-5 autofac owin asp.net-web-api2

c# - injection - unity web api



¿Cómo integrar Autofac con WepApi 2 y Owin? (1)

Estoy utilizando este paquete para integrar Autofac con mi aplicación WebApi Owin:

https://www.nuget.org/packages/Autofac.WebApi2.Owin

Y siguiendo este post:

http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/

Mi código en Startup.cs se ve así:

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);

Sin embargo, de cualquier manera que lo haga girar, reorganice el código o lo que sea, Autofac no puede resolver nada. Antes de Owin tenía mi método Global.asax funcionando bien:

protected void Application_Start() { IContainer container = EngineContext.InitializeEngine(); var dependencyResolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; GlobalConfiguration.Configure(WebApiConfig.Register); }

¿Qué me estoy perdiendo?

Gracias


De acuerdo,

Me lo imaginé. La integración Autofac Owin en realidad crea un telescopio de vida Owin, que está disponible a través de todo el oleoducto de Owin, por lo tanto, está disponible para middleware y extiende este lifetimescope al mensaje de solicitud de Http. Este es el lifetimescope marcado con la etiqueta AutofacWebRequest.

Por lo tanto, todo el código de integración de WebApi anterior aún debe realizarse en el inicio de la aplicación. He incluido:

var dependencyResolver = new AutofacWebApiDependencyResolver(container); config.DependencyResolver = dependencyResolver;

pero se perdió

var builder = new ContainerBuilder(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();

en el método EngineContext.Initialize, que realiza todos los registros a través del constructor.

Aquí puede encontrar más información sobre cómo integrar Autofac con WebApi, lo que obviamente debe hacerse también en el caso de Owin:

https://code.google.com/p/autofac/wiki/WebApiIntegration

¡Espero que esto sea útil!