Замените низкоуровневую зависимостьC#

Место общения программистов C#
Anonymous
Замените низкоуровневую зависимость

Сообщение Anonymous »

Я использую .Net 10 ServiceCollection для построения графа зависимостей, который в моем классе Startup выглядит примерно так:

Код: Выделить всё

services.AddSingleton();
services.AddSingleton();
services.AddSingleton();

public class FileDataWriter : IDataWriter {}

public class NameAnonymiser (IDataWriter dataWriter) : IAnonymiser {}

public class AddressFormatter (IAnonymiser anonymiser) : IFormatter {}

public class CustomerFileController (IFormatter formatter) : ControllerBase {}
CustomerFileController получает входные данные и передает их форматтеру, который обрабатывает и вызывает анонимайзер, который обрабатывает и вызывает dataWriter, который записывает данные в файл.
Однако мне нужно представить CustomerDatabaseController, который использует те же зависимости, за исключением того, что для dataWriter нам нужно писать в базу данных вместо этого:

Код: Выделить всё

public class DatabaseDataWriter : IDataWriter {}

public class CustomerDatabaseController (IFormatter formatter) : ControllerBase {}
Другими словами, мне нужно составить следующие два графика:

Код: Выделить всё

new CustomerFileController(
formatter: new AddressFormatter(
anonymiser: new NameAnonymiser(
dataWriter: new FileDataWriter())))

new CustomerDatabaseController(
formatter: new AddressFormatter(
anonymiser: new NameAnonymiser(
dataWriter: new DatabaseDataWriter())))
Можно ли настроить внедрение зависимостей так, чтобы запрос к CustomerFileController приводил к использованию FileDataWriter для записи данных, а запрос к CustomerDatabaseController приводил к использованию DatabaseDataWriter, и в обоих случаях также использовались AddressFormatter и NameAnonymiser?
Я с радостью переработаю сервис регистрации, но мне бы очень хотелось избежать необходимости передавать такой параметр, как UseFileWriter или UseDatabaseWriter, от контроллеров через различных поставщиков, чтобы они наконец выбрали правильный экземпляр IDataWriter.

Вернуться в «C#»