在.net核心的类库中注入依赖关系。

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

如何在.net核心库项目中把一个类注入到另一个类中?在API项目中,我应该在哪里配置DI,就像在StartUp Class ConfigureServices中一样?

.net asp.net-core dependency-injection core class-library
1个回答
2
投票

对于如何管理这个问题,有很多思路,因为最终,调用者需要为你注册你的DI进程。

如果你看看微软和其他公司使用的方法,你通常会有一个扩展方法,定义一个诸如 "AddMyCustomLibrary "的方法作为IServiceCollection之外的扩展方法。 关于这一点,有一些讨论 此处.


1
投票

在上网查了很多资料后,我没有找到这个问题的全面答案与实例。下面是在类库中使用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();
    }

0
投票

你可以使用Hosting Startup汇编类库作为替代,从调用汇编中显式注册它们。

https:/docs.microsoft.comen-usaspnetcorefundamentalshostplatform-specific-configuration?view=aspnetcore-3.1#class-library。

[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]
namespace HostingStartupLibrary
{
    public class Startup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) => {
                services.AddSingleton<ServiceA>();
            });
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.