gpt4 book ai didi

dependency-injection - 多个项目中的asp.net 5依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 10:24:10 25 4
gpt4 key购买 nike

我有一个 ASP.NET 5 dnxcore 解决方案,其中包含一些项目来分离我的逻辑:

  • API
  • 核心(带有业务逻辑服务)
  • DAL(存储库接口(interface))
  • Entity Framework (存储库实现)

  • 现在我使用 DI 在我的 API Controller 的构造函数中调用我的服务:
    private readonly IMyService _myService;
    public Controller(IMyService myservice){ _myService = myService; }

    我核心中的服务也通过构造函数注入(inject)获取存储库:
    private readonly IMyRepository _myRepo;
    public MyService(IMyRepository myRepo){ _myRepo = myRepo; }

    目前我需要在我的 API 的启动类中定义我的 DI 容器以使其工作。

    我的问题是,如何将存储库的 DI 容器的“构建”放在我的核心项目的服务中。这样,我的 API 与我的服务使用 Entity Framework 这一事实松散耦合,因此我可以更改为例如 mongodb,而无需更改我的 API 项目。

    最佳答案

    您可以轻松地将 IServiceCollection 的扩展方法添加到服务层中,并使用它来注册自己的依赖项。
    然后在启动时,您只需调用服务层上的方法,而无需在 Web 应用程序中引用任何 EntityFramework。

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.DependencyInjection.Extensions;

    namespace your.service.layer
    {
    public static class MyServiceCollectionExtensions
    {
    public static IServiceCollection AddMyServiceDependencies(this IServiceCollection services)
    {
    services.AddScoped<My.Data.Tier.DbContext, My.Data.Tier.DbContext>();
    }
    }

    }

    启动:
    using your.service.layer;

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddMyServiceDependencies();
    }

    现在您的 Web 应用程序只需要对您的服务层的引用,它不直接依赖于 EntityFramework。

    关于dependency-injection - 多个项目中的asp.net 5依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970806/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com