You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 8.0三层架构依赖注入:WebApi如何无直接引用注册DataAccess服务?

解决方案:让Logic层负责注册DataAccess服务

核心思路是把DataAccess的服务注册逻辑封装在Logic层里,WebApi只需要调用Logic层提供的扩展方法,完全不用直接接触DataAccess。

步骤1:在Logic层添加服务注册扩展方法

因为Logic层本身依赖DataAccess,所以它可以直接引用DataAccess.dll,在这里统一注册DataAccess和Logic自己的服务:

using Microsoft.Extensions.DependencyInjection;
using DataAccess;

namespace Logic
{
    public static class ServiceRegistrationExtensions
    {
        public static IServiceCollection AddBusinessServices(this IServiceCollection services)
        {
            // 注册DataAccess层的服务(比如仓储、数据上下文等)
            services.AddScoped<IProductRepository, ProductRepository>();
            services.AddDbContext<AppDbContext>(options => 
                options.UseSqlServer("YourConnectionString"));
            
            // 注册Logic层的业务服务
            services.AddScoped<IProductService, ProductService>();
            
            return services;
        }
    }
}

步骤2:在WebApi的Program.cs中调用扩展方法

WebApi只需要引用Logic.dll,然后调用上面的扩展方法,就能自动完成所有服务的注册,完全不用关心DataAccess的存在:

using Logic;

var builder = WebApplication.CreateBuilder(args);

// 一句话搞定Logic和DataAccess的服务注册
builder.Services.AddBusinessServices();

// 常规WebApi配置
builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

项目引用配置

  • WebApi项目:仅引用Logic项目(或Logic.dll)
  • Logic项目:引用DataAccess项目(或DataAccess.dll)
  • DataAccess项目:无上层项目引用

这种方式既遵循了依赖倒置原则,又保证了WebApi层的纯净性,完全隔离了数据访问层的细节。

内容的提问来源于stack exchange,提问作者Itay.B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:32:37