如何在.net核心库项目中把一个类注入到另一个类中?在API项目中,我应该在哪里配置DI,就像在StartUp Class ConfigureServices中一样?
对于如何管理这个问题,有很多思路,因为最终,调用者需要为你注册你的DI进程。
如果你看看微软和其他公司使用的方法,你通常会有一个扩展方法,定义一个诸如 "AddMyCustomLibrary "的方法作为IServiceCollection之外的扩展方法。 关于这一点,有一些讨论 此处.
在上网查了很多资料后,我没有找到这个问题的全面答案与实例。下面是在类库中使用DI应该做的事情。
在你的库中。
public class TestService : ITestService
{
private readonly ITestManager _testManager;
public TestService(ITestManager testManager)
{
_testManager = testManager;
}
}
public class TestManager : ITestManager
{
private readonly ITestManager _testManager;
public TestManager()
{
}
}
然后在库中扩展IServiceCollection。
public static class ServiceCollectionExtensions
{
public static void AddTest(this IServiceCollection services)
{
services.AddScoped<ITestManager, TestManager>();
services.AddScoped<ITestService, TestService>();
}
}
最后在主程序StartUp(API,Console等)中:
public void ConfigureServices(IServiceCollection services)
{
services.AddTest();
}
你可以使用Hosting Startup汇编类库作为替代,从调用汇编中显式注册它们。
[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]
namespace HostingStartupLibrary
{
public class Startup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((context, services) => {
services.AddSingleton<ServiceA>();
});
}
}
}