首页 > 解决方案 > 使用嵌入式 DI 机制注入内部类的正确方法是什么

问题描述

找不到从单独的库中注入内部类的正确方法。为 Autofac找到了类似问题的解决方案,但无法为嵌入式依赖注入机制找到相同的解决方案。

我的项目结构如下所示:

市场(asp.net)项目:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMarketplaceDbContext();
    }
}

业务(图书馆):

public static class DI
{
    public static IServiceCollection AddMarketplaceDbContext(
        this IServiceCollection services)
    {
        services.AddSingleton<DeviceHandler>(x =>
        {
            var context = x.GetRequiredService<MarketplaceContext>();
            return new DeviceHandler(context);
        });
        return services.AddDbContext<MarketplaceContext>(options =>
            options.UseNpgsql("connection_string"));
    }
}

public class DeviceHandler
{
    private readonly MarketplaceContext _context;

    internal DeviceHandler(MarketplaceContext marketplaceContext)
    {
        _context = marketplaceContext;
    }
}

internal class MarketplaceContext : DbContext
{
    public MarketplaceContext(DbContextOptions<MarketplaceContext> options)
        : base(options)
    {
    }
}

那行得通,但是如果我尝试DeviceHandler像这样注入

services.AddSingleton<MarketplaceHandler>();

然后我得到

System.AggregateException:'无法构造某些服务(验证服务描述符时出错'ServiceType:Business.Core.DeviceHandler Lifetime:Singleton ImplementationType:Business.Core.DeviceHandler':适合类型'Business.Core.的构造函数。找不到 DeviceHandler'。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。)'

2 个内部异常中的 1 个:

InvalidOperationException:验证服务描述符“ServiceType:Business.Core.DeviceHandler Lifetime:Singleton ImplementationType:Business.Core.DeviceHandler”时出错:找不到适合“Business.Core.DeviceHandler”类型的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

2 个内部异常中的 2 个:

InvalidOperationException:找不到适合类型“Business.Core.DeviceHandler”的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

希望任何人都知道更好(或正确)的解决方案。

标签: c#.netdependency-injectioninversion-of-control.net-5

解决方案


推荐阅读