Используя Фабрику для получения Введенных объектов

Это - хорошая практика, чтобы иметь Метод фабрики получить введенные объекты или это в порядке, чтобы просто использовать метод фабрики от платформы DI?

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

6
задан ryudice 18 May 2010 в 17:24
поделиться

2 ответа

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

3
ответ дан 17 December 2019 в 02:25
поделиться

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

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())
);
3
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: