You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ServiceCollection中按请求类型解析泛型服务(类似ILogger)

在ASP.NET Core依赖注入中实现基于消费类的泛型服务注入

我定义了以下接口与类:

public interface IService { }

public interface IService<TCategory> : IService { }

public class Service<TCategory> : IService<TCategory> { }

我希望通过IServiceCollection实现:当按如下方式解析时,为MyClass注入Service<MyClass>,为OtherClass注入Service<OtherClass>:

public class MyClass
{
    public MyClass(IService service) => Service = service;
    
    IService Service { get; } // 应注入Service<MyClass>
}

public class OtherClass
{
    public OtherClass(IService service) => Service = service;
    
    IService Service { get; } // 应注入Service<OtherClass>
}

我不希望采用如下注册方式,因为它要求在构造函数中重复指定具体泛型类型:

serviceCollection.AddSingleton(typeof(IService<>), typeof(Service<>));

public class MyClass
{
    public MyClass(IService<MyClass> service) => Service = service;

    IService Service { get; }
}

public class OtherClass
{
    public OtherClass(IService<OtherClass> service) => Service = service;

    IService Service { get; }
}

我不想在构造函数中重复声明当前所在类的泛型类型,希望实现与ILogger/Logger<TCategory>相同的效果。我原本期望找到接受Func<IServiceProvider, Type, object>委托的扩展方法,但未能找到。

补充说明:此类需求在其他容器(如SimpleInjector)中可实现,示例代码如下:

container.RegisterConditional(typeof(ILogger),
                              _ => typeof(Logger<>).MakeGenericType(_.Consumer!.ImplementationType),
                              Lifestyle.Singleton,
                              _ => true);

我希望找到在Microsoft的IServiceCollection中实现该需求的等价方法。

内容的提问来源于stack exchange,提问作者Ristogod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:25:16