具有多个接口和部分类的依赖注入

问题描述 投票:0回答:1

我有一个对于我的所有应用程序都是通用的类。最初,我为每个功能(例如 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:'某些服务无法构建(验证服务描述符时出错”

如有任何帮助,我们将不胜感激

.net-core dependency-injection .net-8.0
1个回答
0
投票

如果您希望使用一行 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();
© www.soinside.com 2019 - 2024. All rights reserved.