2014-08-28 16 views
32

Quando si implementa DI in WebAPI con StructureMap, abbiamo usato il ServiceActivator trovano inCome utilizzare Container anziché ObjectFactory in StructureMap ServiceActivator?


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

Ma ora con la nuova StructureMap, il mio ReSharper suggerisce ted:

Classe 'StructureMap.ObjectFactory' è obsoleto: ObjectFactory verrà rimosso in una versione futura di StructureMap 4.0. Favorire l'utilizzo della classe Container per i lavori futuri

L'intellisense su Container mi ha fornito solo informazioni molto limitate.

Come possiamo riscrivere il nostro ServiceActivator con il contenitore di classe?

risposta

34

static stuff is going away. Se il vostro non si utilizza un Service Locator di un certo tipo si sta andando ad avere implementare il proprio "ObjectFactory" come referenced here:

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

Update: La mia risposta precedente era sbagliata. Grazie a @JoeMighty per l'heads up.

+1

Sicuramente questo crea solo una nuova istanza di un contenitore vuoto? Dalla mia esperienza sembra essere il caso. –

+0

@JoeMightly Per citare l'autore "ObjectFactory è solo una facciata statica sopra Container comunque". Tuttavia, ti vomiterò un succo più tardi oggi che lo dimostra. – mxmissile

+0

Ho letto anche questo; comunque mi sembra di finire con un contenitore vuoto. Un esempio che dimostrerebbe questo sarebbe molto apprezzato! –

Problemi correlati