C # - .NET Core - реализация внедрения внедрения зависимостей для области видимости - PullRequest
0 голосов
/ 20 сентября 2019

Можно ли изменить реализацию интерфейса для конкретной области?Я хотел бы иметь стандартную реализацию ILogService, которая будет записывать данные на диск.Но для планировщика задач я использую «IServiceScopeFactory.CreateScope ()», чтобы разрешить реализацию задач, но в этом случае я хотел бы использовать другую реализацию для ведения журнала, чтобы данные попадали в мою базу данных.

interface ILogService { void Write(string text); }

Это имеет реализацию по умолчанию

class LogDisk : ILogService { void Write(string text) { ... } }

Но когда я делаю GetService () в области, где класс x использует ILogService, я хотел бы использовать это

class LogTask : ILogService { void Write(string text) { ... } }

Можно ли изменить реализацию интерфейса для одной конкретной области?

Пример

public class TaskFactory : ITaskFactory
{
    private IServiceScopeFactory _serviceScopeFactory;

    public TaskFactory(IServiceScopeFactory serviceScopeFactory)
    {
        this._serviceScopeFactory = serviceScopeFactory;
    }

    public ITaskDefinition GetDefinition(ETaskType taskType)
    {
        using (var scope = this._serviceScopeFactory.CreateScope())
        {
            var provider = scope.ServiceProvider.GetService<ITaskX>();
            return null;
        }
    }
}

В рамках задач я не хочу смотреть, как это должно быть реализовано, еслиЯ должен использовать реализацию A или B. У каждой задачи есть свои зависимости, вот о чем я хотел бы позаботиться о внедрении зависимостей.Но единственная реализация, которую я хотел бы изменить, - это реализация ILogService.

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