Я работаю над проектом, у которого очень мало внедрения зависимостей, и я хотел бы начать добавлять его постепенно.
Чтобы проверить это, я хотел бы предоставить конечную точку API, взять параметрыпереданный вызывающему клиенту методу API, создайте корень композиции и затем передайте параметры по цепочке.Контейнер IoC, который я использую, - это Autofac.
Вопрос, который у меня возникает, заключается в том, каков наилучший способ передачи параметров времени выполнения в конструктор (параметры, передаваемые потребителем API) разрешенного сервиса изкорень композиции?Также предположим, что каждый конструктор принимает параметр, переданный в API, как бы я передал ему параметр по цепочке через все конструкторы службы?
Ответы, которые я вижу при поиске ответа, включают передачузавод.Таким образом, у меня было бы что-то вроде этого:
class Example
{
private readonly ISftpClientFactory _clientFactory;
public Example(ISftpClientFactory injectedFactory)
{
_clientFactory = injectedFactory;
}
public void DoTheWork()
{
var client = _clientFactory.GetClient(host, userName, password, timeout);
}
}
Проблема с этим ответом состоит в том, что я не знаю строковые параметры, переданные в GetClient
в DoTheWork
, это должно быть передано этому классучерез конструктор из корня композиции, который получает параметры из метода API.
Другие решения, которые я видел на фабрике, всегда выглядят так, как будто у меня есть информация, доступная в глобальном хранилище, таком как текстовое поле или сеанс.В моем случае я мог бы сохранить параметры в другом классе, а затем создать фабрику для извлечения из этого хранилища, а затем передать эту фабрику вниз, но это выглядит как перебор и нарушает инкапсуляцию.
Вопрос может быть