如何使用包含在其类依赖注入中的 .net 5 类库的 dll?
Posted
技术标签:
【中文标题】如何使用包含在其类依赖注入中的 .net 5 类库的 dll?【英文标题】:How do I use dll of .net 5 class library that contain in its class Dependency injection? 【发布时间】:2021-11-28 09:48:57 【问题描述】:在我的 Asp.net Core 5 API 项目中
我有一个控制器使用的 serviceLayer,用于从名为 dataLayer 的第三层获取数据。 我想将服务层用作不同项目中的 DLL。
这个ServiceLayer包含这样的依赖注入:
namespace ServiceLayer
public class UserService : IUserService
IUserRepository userRepository; // (From DataLayer)
public UserService(IUserRepository repository) : base(repository)
this.userRepository = repository;
public Users GetAllPersonsById(int id)
return userRepository.GetById(id);
public interface IUserService : IService<Users>
Users GetAllPersonsById(int id);
如何在 DLL ServiceLayer
中使用 GetAllPersonsById 方法【问题讨论】:
创建类库项目 ServiceLayer,是一个类库。我想在其他项目中使用它。我关于如何使用它的问题,因为依赖注入 然后作为引用导入,依赖注入在DLL本身完成 如果类库与应用在同一个解决方案中,只需将其添加为项目引用(右键单击引用然后添加引用)。如果没有,您将不得不创建一个 nuget 包。 【参考方案1】:我可以使用它,因为依赖注入
一旦您引用了 DLL/项目,您就可以像在项目中一样使用所有类。
将类用作服务:
-
提供服务
注入服务
有很多可用的文档,所以我会保持简短:
// provide in startup.cs
services.AddTransient<IUserService, UserService>();
// Inject where you need it
MyConstructor(IUserService userService)
见https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0
提供扩展方法
如果我们看看其他库,它们中的大多数都提供了设置服务的方法。
示例:实体框架核心
public void ConfigureServices(IServiceCollection services)
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(...));
所以你可以:
-
在您的库中,为 IServicesCollection 创建一个扩展方法,以添加您的库的所有服务。
在消费项目中,调用
services.AddMyLibServices()
。
这可能看起来像这样:
public static class ServicesConfiguration
public static void AddDataLayer(this IServiceCollection services)
services.AddTransient<IUserService, UserService>();
// ... same for all services of your lib
这里有一个更详细的教程: https://dotnetcoretutorials.com/2017/01/24/servicecollection-extension-pattern/
Lamar 服务注册表
一种可选的替代方法是服务注册。它与扩展方法非常相似,但使用一个类来进行设置。见https://jasperfx.github.io/lamar/documentation/ioc/registration/registry-dsl/
组合根
您可能想阅读有关组合根模式的信息,例如What is a composition root in the context of dependency injection?
在一个简单的应用程序中,您的 startup.cs 是您的组合根。在更复杂的应用中,您可以创建一个单独的项目,以便在一个地方配置您的应用服务。
创建 DLL
创建DLL有两种方式:
作为解决方案中的一个项目(因此您的解决方案有多个项目,每个项目都会产生一个单独的 DLL) 作为单独的解决方案和 nuget 包【讨论】:
以上是关于如何使用包含在其类依赖注入中的 .net 5 类库的 dll?的主要内容,如果未能解决你的问题,请参考以下文章
NetCore 3.1 项目搭建反射依赖注入,Swagger结合Jwt,sqlSugar+EfCore异常中间件+Log4Net+MongoDb,Redis+Docker,丰富的公共类库,代码示例 下
.NET和Python哪个好?新应用诞生.NET依赖注入在区块链项目AElf中的实践问题