Подтвердить что ты не робот

Является ли это хорошим примером "противозачаточной инъекции ублюдка"?

Я вижу, как ведущие разработчики пишут такой код и читают книгу Марка Семанна "Инъекция зависимостей в .NET". Мне интересно, является ли конкретное "новое" "чужим", таким образом, "Bastard Injection"??

public class SessionInitServiceManager
{
    protected readonly ICESTraceManager _traceManager;
    protected readonly ILogger _logger;
    protected readonly IAggregateCalls _aggregator;
    protected readonly IMultiCoreRepository _repository;

    public SessionInitServiceManager(ICESTraceManager traceManager,
                                     ILogger logger,
                                     IAggregateCalls aggregator,
                                     IMultiCoreRepository repository)
    {
        _traceManager = traceManager;
        _logger = logger;
        _aggregator = aggregator;
        _repository = repository;
    }

    public SessionInitServiceManager() : this(new CESTraceManager(),
                                              new Logger("BusinessServices.authenticateUser"),
                                              new Aggregator(),
                                              new RepositoryFactory().BuildMultiCoreRepository()) { }
4b9b3361

Ответ 1

Это наверняка выглядит как классический пример Bastard Injection. Причина в том, что у вас есть то, что появляется как четыре иностранных по умолчанию. Foreign Default - это значение по умолчанию, в котором тип поступает из другого модуля/проекта/DLL. Я бы пропил включить пространство имен в это определение, потому что пространства имен могут обозначать границы, в которых в будущем вы делаете прорыв в свой собственный модуль. Это больше напоминает об этом, когда вы решите использовать локальный по умолчанию (я бы разделил это на свой собственный модуль в будущем?).

То, как это не было бы Bastard Injection, будет заключаться в том, что все эти классы живут в одном модуле. Дело в том, что это так плохо, потому что вы перетаскиваете зависимости, и теперь ваш класс тесно связан с этими классами. Если я захочу использовать свою собственную версию ведения журнала, я должен взять с собой DLL для ведения журнала и т.д., Даже если я не использую, что отрицает преимущества модульного дизайна приложения.

Ответ 2

Мне довелось заимствовать эту книгу, инъекцию зависимости в .NET от друга. Я вижу, что вы говорите. Я верю, что это "ублюдка". Это жестокий термин, но я полагаю, что после ColdFusion (кашель) имеет тег "CFABORT" как часть языка.

Кроме того, я заметил хорошую статью, сообщение в блоге Как не делать инъекции зависимостей - статический или одноэлементный контейнер.

В принципе, прежде чем мы начнем, позвольте получить что-то в стороне:

Инъекция зависимостей!= Использование контейнера IoC "

Вот кикер: "Это рождение статического контейнера. Вместо того, чтобы изменять конструктор контроллера, чтобы принять зависимость, мы просто меняем строку, в которой создается экземпляр службы, чтобы разрешить ее, используя контейнер."

 public class HomeController
 {
    private readonly IExampleService _service;

    public HomeController()
    {
      _service = Container.Instance.Resolve<IExampleService>();
    }

    public ActionResult Index()
    {
      return View(_service.GetSomething());
    }
 }