Это - хорошая практика, чтобы иметь Метод фабрики получить введенные объекты или это в порядке, чтобы просто использовать метод фабрики от платформы DI?
Я использую карту структуры, должен я просто использовать ObjectFactory. GetInstance (); или если я создаю класс фабрики, и в этом классе называют ObjectFactory. GetInstance ();? потому что, если я называю ObjectFactory. GetInstance (); в моих классах я создал бы связь с платформой DI? извините, если я не осведомлен, я плохо знаком с этим понятия.Спасибо!
Если вы уже используете структуру DI, зачем повторно реализовывать фабричный шаблон, если он уже предоставлен платформой? Также вы не должны создавать зависимость от инфраструктуры DI на бизнес-уровнях приложения. Здесь вы должны абстрагироваться с интерфейсами и абстрактными классами. Каркас DI следует использовать только на самом высоком уровне, например, в графическом интерфейсе пользователя, чтобы выполнить подключение нижних уровней и выбрать, например, подходящий уровень доступа к данным.
Заводской метод полезен, когда вам нужен детальный контроль над , когда вам нужен экземпляр. Тем не менее, вы не должны напрямую зависеть от самого контейнера, а скорее внедряете фабричный метод в качестве зависимости. Вот пример, иллюстрирующий это:
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())
);