asp.net-web-api structuremap

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

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.