У меня есть класс, который использует обработчик впрыскивается сделать что-тоПравильный способ инъекционные зависимостей
class MyClass
{
private readonly _handler;
//Injected here
public MyClass(IHandler handler)
{
_handler=handler;
}
public MyMethod(Param p)
{
var request= Transform(p);
_handler.DoSomething(Request1 request)
}
}
Теперь, в зависимости от ситуации, я мог бы иметь другую реализацию IHandler
, но которые могли бы принять Request2
к DoSomething()
. Я могу сделать Request1
и Request2
из базы RequestBase
и может изменить IHandler
исполнение DoSomething()
принять RequestBase
. Но перед вызовом DoSomething()
мне все еще нужно знать, какие конкретные Request
(или Request2
) пройти, что нарушает цель инъекции зависимости в первую очередь. Может ли кто-нибудь предложить лучший способ сделать это? Или это совершенно неправильный способ взглянуть на него?
', который нарушает назначение инъекции зависимостей в первом месте', не зависит от того, что вы пытаетесь передать, поэтому ваша проблема не связана с DI вообще –
ответ на ваш вопрос: каждый экземпляр IHandler должен работать с Request1 - это контракт, который вы создали. он не может «взять запрос2». Вероятно, вам нужно настроить свой IHandler, чтобы предоставить другой метод «doSomethingWithRequest2» –