When implementing DI in WebAPI with StructureMap, we used the ServiceActivator found in
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; } }
But now with the new StructureMap, my ReSharper suggested:
Class 'StructureMap.ObjectFactory' is obsolete: ObjectFactory will be removed in a future 4.0 release of StructureMap. Favor the usage of the Container class for future work
The intellisense on Container
gave me only very limited information.
How are we supposed to rewrite our ServiceActivator with the Container class?
The static stuff is going away. If your not using a Service Locator of some type you're going to have implement your own "ObjectFactory
" as 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: My previous answer was wrong. Thanks @JoeMighty for the heads up.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With