我有一个带有类库的 ASP.NET Core Web API 项目。我可以注册类库的依赖项,这些依赖项直接作为引用添加到项目中。但我无法找到方法来注册未直接添加到项目中的类库的依赖项。
例如,如以下屏幕截图所示:
这是 ASP.NET Core Web API 项目。
它有一个类库
FirstClasslib
项目。
添加
FirstClasslib
项目作为对 ASP.NET Core Web API 项目的引用。
FirstClasslib
项目具有SecondClasslib
项目的dll引用。
SecondClasslib
也是一个带有接口及其实现的库,如下图所示:
我想通过 DI 注册
SecondClasslib
的依赖项,就像我为 FirstClasslib
所做的那样。但由于它没有直接链接到 ASP.NET Core Web API 项目,我该怎么做?
请在 https://github.com/sujadkar/WebApplication1
找到源代码存储库我尝试了
BuildServiceProvider
方法,但很多人说这是反模式,我们应该避免。我想使用依赖注入来解决 SecondClasslib
的依赖关系。
如果您不希望您的 API 项目添加对
SecondClassLib
的引用,那么在您的 FirstClassLib
项目中,创建一个如下扩展方法:
public static class MyExtension
{
public static IServiceCollection AddSecondClassLibServices(this IServiceCollection services)
{
// register all services here
services.AddScoped<ISecondClass, SecondClassImplementation>();
return services;
}
}
然后在您的 Web API 项目中,使用:
builder.Services.AddSecondClassLibServices();
对于多个项目,您需要一个 compose 根项目来注册上述所有服务,并需要您的主项目来引用该项目