Подтвердить что ты не робот

Как использовать Container вместо ObjectFactory в StructureMap ServiceActivator?

При внедрении DI в WebAPI с 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;
    }
}

Но теперь с новой StructureMap мой ReSharper предложил:

Класс 'StructureMap.ObjectFactory' устарел: ObjectFactory будет удален в будущей версии StructureMap 4.0. Способствуйте использованию класса Container для дальнейшей работы.

На intellisense на Container была представлена ​​только очень ограниченная информация.

Как мы должны переписать наш ServiceActivator с помощью класса Контейнер?

4b9b3361

Ответ 1

Статический материал уходит. Если вы не используете локатор сервисов какого-либо типа, вы собираетесь реализовать свой собственный "ObjectFactory" как указанный здесь:

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

Обновление: Мой предыдущий ответ был неправильным. Спасибо @JoeMighty за головы.