Что является эквивалентом ObjectFactory.Inject в StructureMap 3.0

Я недавно обновился до StructureMap 3.0 и заметил, что ObjectFactory.Inject отсутствует. Что является эквивалентом для простой конфигурации инъекций, предоставленной этим методом?

1 ответ

Решение

Как уже упоминалось, 3.0 перенес много методов в ObjectFactory.Container, Inject есть, но ObjectFactory будет выпадать на 4.0. Так что избегайте такого подхода.

Inject и много методов в Container учебный класс. Это не статический класс, как ObjectFactory является. Чтобы справиться с этим, вы можете настроить так:

var container = new Container(x =>
{
    x.For<IFooBar>().Use<FooBar>();
}

container.Inject(myObject);

ОК, это работает, только если я в одном классе, но иногда вам нужно IContaner класс внутри контроллера, и вы создаете свой Container при запуске проекта, в этом случае вы можете сделать это:

public MyController(ISession session, IContainer container)
{
    _session = session;
    _container = container;
}

public void DoSomeStuff()
{
    _container.Inject(new FooBar());
}

IContainer может быть введен с помощью вашего Respendency Resolver. В моем случае я использую System.Web.Mvc.DependencyResolver с обычаем StructureMapDependencyResolver так это DependencyResolver.Current.GetService<IContainer>().Inject(myService); тоже возможно.

Другие вопросы по тегам