DotNet核心依赖注入多个项目

时间:2020-07-19 17:38:56

标签: asp.net-core dependency-injection shared-libraries blazor

我正在构建Blazor WASM应用程序。

该应用程序正在运行,但是我现在希望将项目拆分为明智的自包含项目,但是在解决如何实现依赖项注入而不在项目之间创建循环依赖项时遇到问题。

Projects:
App.Client - UI Razor Pages
App.Server - Main project, controllers, defines interfaces
App.Shared - Shared models between Client & Server
App.Data - Implements repositories, unit of work, Db Context, migrations

我遇到的问题是App.Data项目具有对App.Server项目的依赖关系,以实现其所需的接口,但是我不确定如何在以下位置中配置startup.cs文件中的依赖关系: App.Server项目,因为它不能依赖App.Data项目。

enter image description here

2 个答案:

答案 0 :(得分:0)

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Test.Models;
using Test.Models.Data;

namespace Test
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddDbContext<AppDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("database"), b => b.MigrationsAssembly("Test")));
            services.AddIdentity<User, Role>()
                .AddEntityFrameworkStores<AppDbContext>()
                .AddDefaultTokenProviders();
            ...
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IAntiforgery antiforgery)
        {
            ...
        }
    }
}

项目结构

enter image description here

答案 1 :(得分:0)

我最终结合了这两个注释,以实现针对Blazor WASM应用程序修改的Clean Architecture结构。

添加Core项目,定义接口,以及实施基础结构接口(例如数据库)的Infrastructure项目。然后,服务器就可以依赖这两个项目。

然后,Startup使用Core或Infrastructure中的适当实现,通过DI配置接口。

enter image description here