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

C#-.NET核心-范围的依赖项注入更改实现,c#,.net,dependency-injection,.net-core,C#,.net,Dependency Injection,.net Core,是否可以为特定范围更改接口的实现? 我想要的是“ILogService”的默认实现,它将数据记录到磁盘。 但是对于任务调度器,我使用“IServiceScopeFactory.CreateScope()”来解析任务的实现,但在本例中,我希望使用不同的实现来记录,以便数据最终进入我的数据库 interface ILogService { void Write(string text); } 这有一个默认实现 class LogDisk : ILogService { void Write(str

是否可以为特定范围更改接口的实现? 我想要的是“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;
        }
    }
}
公共类任务工厂:ITaskFactory
{
私营IServiceScope工厂(服务范围工厂);;
公共任务工厂(IServiceScopeFactory服务范围工厂)
{
此.\u serviceScopeFactory=serviceScopeFactory;
}
公共ITaskDefinition GetDefinition(ETaskType任务类型)
{
使用(var scope=this.\u serviceScopeFactory.CreateScope())
{
var provider=scope.ServiceProvider.GetService();
返回null;
}
}
}

在任务中,如果我使用实现A或B,我不想看这应该如何实现。每个任务都有自己的依赖项,这就是我希望依赖项注入能够解决的问题。但我想更改的唯一实现是ILogService。

我知道有点难看,但您可以创建第二个接口(实现ILogService)并在依赖项注入中有两个单独的配置。可能重复@C1sc0我不想让我的任务知道版本A或B,当我在调度程序之外执行任务时,它应该只将日志存储在磁盘上。但是当任务调度器执行它时,它应该将它保存在内存中,这样调度器就可以在数据库中记录它。@bradbury9我不明白你的意思。因为我怎样才能更改任务调度器范围的实现呢?我想@C1sc0链接的就是您要找的。