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

如何使用含依赖注入的.NET 5类库ServiceLayer DLL调用GetAllPersonsById方法

复用ServiceLayer DLL调用GetAllPersonsById方法的完整步骤

1. 打包生成DLL

  • 右键你的ServiceLayer项目,选择【生成】,生成完成后在项目bin/Release/net5.0(对应你设置的目标框架目录)下获取ServiceLayer.dll。
  • 必须同步打包DataLayer项目获取DataLayer.dll,ServiceLayer依赖DataLayer定义的IUserRepository接口与实现,两者需要同时引入目标项目。

2. 目标项目引入依赖

  • 将ServiceLayer.dll、DataLayer.dll复制到目标项目的本地目录。
  • 右键目标项目的【依赖项】->【添加引用】->【浏览】,选中上述两个DLL完成添加。
  • 确认目标项目已安装ServiceLayer、DataLayer依赖的所有NuGet包(如EF Core、数据库驱动等),版本需和打包时的版本一致。

3. 注册DI容器服务

你可以先在ServiceLayer项目中添加服务注册扩展方法,简化后续复用步骤,打包DLL前加入如下代码:

namespace ServiceLayer
{
    public static class ServiceLayerExtensions
    {
        public static IServiceCollection AddServiceLayer(this IServiceCollection services)
        {
            // 注册所有服务层实例,后续新增服务也可在此统一添加
            services.AddScoped<IUserService, UserService>();
            return services;
        }
    }
}

然后在目标项目的Startup.cs的ConfigureServices方法中注册所有相关服务:

public void ConfigureServices(IServiceCollection services)
{
    // 先注册DataLayer的仓储实现,你也可以在DataLayer做类似的扩展方法统一注册
    services.AddScoped<IUserRepository, UserRepository>();
    // 注册ServiceLayer所有服务
    services.AddServiceLayer();
    
    // 其他服务注册逻辑...
}

如果不想做扩展方法,也可以直接在目标项目手动注册IUserService和对应实现。

4. 调用GetAllPersonsById方法

方式1:构造函数注入(推荐,适用于控制器、其他DI托管的服务)

直接在需要调用的类的构造函数中注入IUserService即可调用:

[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
    private readonly IUserService _userService;

    public UserController(IUserService userService)
    {
        _userService = userService;
    }

    [HttpGet("{id}")]
    public IActionResult GetUser(int id)
    {
        // 调用目标方法
        var user = _userService.GetAllPersonsById(id);
        return Ok(user);
    }
}

方式2:手动从容器获取(适用于非DI托管的场景)

如果需要在没有被DI托管的类中调用,可以手动从IServiceProvider获取实例:

// 示例:从HttpContext获取服务提供者,其他场景可替换为对应的ServiceProvider实例
using var scope = HttpContext.RequestServices.CreateScope();
var userService = scope.ServiceProvider.GetRequiredService<IUserService>();
var user = userService.GetAllPersonsById(id);

注意事项

  • 目标项目的appsettings.json需要配置和原项目一致的数据库连接字符串,保证DataLayer的仓储可以正常连接数据库。
  • 如果有公共实体类、通用接口(如示例中的IService<T>、Users实体),建议单独抽离到公共类库打包为DLL一起引用,避免两边定义不一致导致类型不匹配错误。
  • 打包时选择Release模式生成DLL,性能更优体积更小。

内容的提问来源于stack exchange,提问作者Ali.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:27:01