Как использовать внедрение зависимости в методе или свойстве? - PullRequest
0 голосов
/ 14 декабря 2018

Обычно я использую внедрение зависимости в конструктор класса.Зависимости регистрируются в контейнере единицы, например:

container.RegisterType<IMyInterface, MyClass>();

Но в одном классе невозможно внедрить конструктор (это сторонний класс, от которого я наследую, и конструктор по умолчанию (без внедрения)) ДОЛЖНЫ использоваться.

Как я могу использовать свой MyClass также в этом классе?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Наверное, я не понимаю, как это сложно.

(это сторонний класс, от которого я наследую, и конструктор по умолчанию (без внедрения)

Предположим, это класс третьей стороны, от которого вы унаследовали:

public abstract MyClassBase
{
  public MyClassBase()
  {
  }

  public abstract void DoSomething();
}

Что мешает вам выводить и вводить?

public MyClassDerived
{
  private IInjectioned _injection;

  public MyClassDerived(IInjectioned injection)
    // Call default constructor without params
    : base()
  {
    _injection = injection;
  }

  public override void DoSomething()
  {
    _injection.DoSomething();
  }      
}
0 голосов
/ 14 декабря 2018

Если основное ограничение вызывает конструктор по умолчанию для стороннего класса, разве вы не можете сделать что-то подобное?

public class InheritedClass : ThirdPartyClass
{
   private IMyInterface _myInterface;

   // the default ctr of the 3rd party class is still being called
   public InheritedClass(IMyInterface myInterface, string arg) : base(arg)
   {
       _myInterface = myInterface;
   }
}

В случае, если вы действительно хотите сказать, что у вашего собственного унаследованного класса есть определенный конструктор, которыйВы должны использовать, тогда почему бы не сделать что-то подобное?

 public class InheritedClass : ThirdPartyClass
{
   // Constructor that has to be used
    public InheritedClass(string arg) : base(arg)
    {
    }

    // Ctr with DI that also calls the required default ctr - could be used instead..
    public InheritedClass(IMyInterface myInterface, string arg) : this(arg)
    {
        _myInterface = myInterface;
    }
}

Если ни один из них не применим к вашему случаю, то вам нужна концепция инъекции метода, примером может быть это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...