c# - 使用嵌入式 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”的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。
希望任何人都知道更好(或正确)的解决方案。