我有一个对于我的所有应用程序都是通用的类。最初,我为每个功能(例如 DBContext、SendEmail、DataCache)使用不同的类和不同的类文件。如果我分别注册它们,效果就很好。但这些对于 40 多种应用程序来说是常见的。然后我想到有一个分部类和多个接口。拥有一个类的原因是只有一个接口注册
这是我常用的界面。其他接口都会有自己的方法
`public interface ICommon:IInterface1,IInterface2,Interface3
{
public string M1();
public string M2();
}`
public interface IInterface1
{
public string M3();
}
public interface IInterface2
{
public string M4();
}
public interface IInterface3
{
public string M5();
}
在我的单个类文件中
public partial class common : ICommon
{
public string M1()
{
}
public string M2()
{
}
}
然后扩展这个部分类,因为需要从其余接口(1,2,3)中添加其他方法
public partial class : ICommon
{
public string M3()
{
}
}
public partial class : ICommon
{
public string M4()
{
}
}
public partial class : ICommon
{
public string M5()
{
}
}
然后在我的应用程序中,在program.cs文件中,我正在注册通用接口
builder.Services.AddScoped<ICommon,Common>();
但是我收到错误“System.AggregateException:'某些服务无法构建(验证服务描述符时出错”
如有任何帮助,我们将不胜感激
如果您希望使用一行 DI 配置来设置许多常见的 DI,并在许多 API 项目中使用它,那么这里有一个建议。
有一个项目是您的公共依赖项。如果有帮助的话,比如
Api.CommonDependencies
。在那里,定义一个静态扩展方法,如下所示:
public static class ServiceCollectionExtensionsForCommonApi
{
public static IServiceCollection AddCommonApiDependencies(this IServiceCollection services)
{
services.AddScoped<ISendEmail, MyEmailSender>();
services.AddScoped<ICacheData, MyCacheImplementation>();
services.AddScoped<IDBContext, MyDbContext();
return services;
}
}
然后在 40 个 API 项目中的每一个中,您都可以引用该
Api.CommonDependencies
项目,并在您的 Startup
或 Program.cs
中使用它们(取决于它们是什么类型的 API 项目)。
例如如果它是一个 .NET 8 独立函数 API 项目:
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services
.AddCommonApiDependencies() // your extension method
.AddHttpClient() // or whatever else you need
//etc
})
.Build();
host.Run();