【问题标题】:Using Dependency Injection with .NET Core Class Library (.NET Standard)将依赖注入与 .NET Core 类库 (.NET Standard) 结合使用
【发布时间】:2017-05-10 11:11:06
【问题描述】:

我已经浏览了链接:

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection

并了解了如何使用 Web API 的依赖注入。

正如上面链接中提到的,我可以使用 Startup (Startup.cs) 类在 API 层内进行依赖注入。但是.NET Core 类库如何实现依赖注入。下面是我添加类库的屏幕截图。

而我的项目结构是

在项目“DataManagement.Repository”中,我编写了一个类“UserRepository”,在项目“DataManagement.Repository.Interfaces”中编写了一个接口“IUserRepository”。

在项目“DataManagement.Business”中我写了一个类“UserManager”

class UserManager
    {
        private IUserManager _userManager;
        public UserManager(IUserManager userManager)
        {
            _userManager = userManager;
        }
    }

如您所见,我正在尝试通过构造函数来实现依赖注入。

但我不确定需要进行哪些更改才能在 .NET Core 类库(.NET 标准)中启用依赖项注入。

【问题讨论】:

    标签: dependency-injection asp.net-core .net-core asp.net-core-webapi visual-studio-2017


    【解决方案1】:

    你不必在你的类库中做任何事情。只有主应用程序有composition root(应用程序生命周期中您可以设置对象图的最早点)。

    这发生在您的 ASP.NET Core 应用程序的 Startup.cs 中。您还可以在此处注册您的依赖项:

    services.AddScoped<IUserManager,UserManager>();
    

    就是这样。类库没有组合根。它们也不应该,因为你不能在没有应用程序的情况下使用它们,并且使用的 IoC 容器是应用程序而不是库的选择。

    但是,您可以提供方便的方法来执行此注册,例如 ASP.NET Core 或某种模块系统中常见的 AddXxx 方法,例如 Autofac 或 Castle Windsor 等第 3 方 IoC 容器。

    【讨论】:

    • 正如你在回答中所说,如果我在Startup.csom asp.net 核心应用程序中添加这个依赖项,然后我添加它对.NetCore 类库的引用,我可以使用它吗?
    • 是的,如果你一直使用依赖注入(并且从不实例化服务new)它将起作用
    • 我在http://stackoverflow.com/questions/41342064/using-ihostingenvironment-in-netcore-library 中问了一个关于这个主题的问题,如果可以的话请给我帮助。谢谢
    • .Api 项目是否必须引用 .Repository 项目才能访问 .Repository 接口的实现?
    • @WillC:是的,因为您的组合根是 Web 应用程序。您可以使用扩展方法将其抽象一点(例如 ASP.NET Core 使用 .AddXyz 在 .AddXyz` 方法中进行注册。
    猜你喜欢
    • 2023-02-24
    • 2020-08-11
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2021-10-23
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多