asp.net web api - ¿Cómo usar Container en lugar de ObjectFactory en StructureMap ServiceActivator?
asp.net-web-api (1)
Al implementar DI en WebAPI con StructureMap, usamos el ServiceActivator encontrado en
- Configuración de Inyección de Dependencia con ASP.NET WebAPI 2.1
- WebAPI + APIController con structureMap
public class ServiceActivator : IHttpControllerActivator
{
public ServiceActivator(HttpConfiguration configuration) {}
public IHttpController Create(HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = ObjectFactory.GetInstance(controllerType) as IHttpController;
return controller;
}
}
Pero ahora con el nuevo StructureMap , mi ReSharper sugirió:
La clase ''StructureMap.ObjectFactory'' está obsoleta: ObjectFactory se eliminará en una futura versión 4.0 de StructureMap. Favorecer el uso de la clase Container para el trabajo futuro
El intellisense en Container
me dio solo información muy limitada.
¿Cómo se supone que debemos reescribir nuestro ServiceActivator con la clase Container ?
El material estático se va . Si no utiliza un Localizador de servicios de algún tipo, implementará su propia " ObjectFactory
" como se menciona aquí :
public static class ObjectFactory
{
private static readonly Lazy<Container> _containerBuilder =
new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);
public static IContainer Container
{
get { return _containerBuilder.Value; }
}
private static Container defaultContainer()
{
return new Container(x =>
{
// default config
});
}
}
Actualización: mi respuesta anterior fue incorrecta. Gracias @JoeMighty por el aviso.