C#-.NET Core-范围的依赖注入更改实现

时间:2019-09-20 11:17:58

标签: c# .net dependency-injection .net-core

是否可以针对特定范围更改接口的实现? 我想拥有的是“ ILogService”的默认实现,它将数据记录到磁盘。 但是对于任务计划程序,我使用“ IServiceScopeFactory.CreateScope()”来解决任务的实现,但是在这种情况下,我想使用其他实现进行记录,以便数据最终存储在我的数据库中。

interface ILogService { void Write(string text); }

这是默认实现

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

但是当我在类x使用ILogService的范围内执行GetService()时,我想使用它

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的实现。

0 个答案:

没有答案