Фабричный метод полезен, когда вам нужен детальный контроль над , когда вам нужен экземпляр. Тем не менее, вы не должны напрямую зависеть от самого контейнера, а должны использовать метод фабрики как зависимость. Вот пример, иллюстрирующий это:
public class SomeController
{
private Func<ISomeService> _serviceFactory;
public SomeController(Func<ISomeService> serviceFactory)
{
_serviceFactory = serviceFactory;
}
public void DoSomeWork()
{
var service = _serviceFactory();
....
}
}
Регистрационный код StructureMap будет выглядеть примерно так:
var container = new Container(cfg =>
cfg.For<ISomeService>().Use(() => new SomeServiceImpl())
);