2010-05-18 4 views
6

Как правильно использовать метод Factory для извлечения инъецируемых объектов, или это нормально, просто использовать фабричный метод из рамки DI?Использование фабрики для получения объектов с инжектированием

Я использую структуру структуры, должен ли я использовать ObjectFactory.GetInstance(); или мне следует создать фабричный класс и внутри этого класса вызвать ObjectFactory.GetInstance() ;? потому что если я вызову ObjectFactory.GetInstance(); в моих классах я бы создал связь с картой DI? извините, если я невежественен, я новичок в этой концепции. Благодаря!

ответ

3

Если вы уже используете фреймворк DI, то зачем повторно использовать фабричный шаблон, если он уже предоставлен каркасом? Также вы не должны создавать зависимость с каркасом DI в бизнес-слоях приложения. Там вы должны абстрагироваться с интерфейсами и абстрактными классами. Рамку DI следует использовать только на самом высоком уровне, например, в графическом интерфейсе для выполнения сантехники нижних слоев и выбирать, например, подходящий уровень доступа к данным.

+1

Я согласен с Дарин, пусть рамки DI сделать его работу вместо того, чтобы дублировать функциональность. –

3

Заводской метод полезен, когда вам нужен мелкозернистый контроль над , когда вам нужен экземпляр. Тем не менее, вы не должны напрямую зависеть от самого контейнера, а скорее вводите фабричный метод в качестве зависимости. Вот пример, иллюстрирующий это:

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()) 
); 
Смежные вопросы