Asp.Net Core中注入泛型接口的依赖项
2022-05-10 13:34
1846 查看
1、扩展批量注入类
public static class ServicesExtersion { public static void AddClassesAsImplementedInterface( this IServiceCollection services , Assembly assembly , Type compareType , ServiceLifetime lifetime = ServiceLifetime.Scoped) { assembly.GetTypesAssignableTo(compareType).ForEach((type) => { foreach (var implementedInterface in type.ImplementedInterfaces) { switch (lifetime) { case ServiceLifetime.Scoped: services.AddScoped(implementedInterface, type); break; case ServiceLifetime.Singleton: services.AddSingleton(implementedInterface, type); break; case ServiceLifetime.Transient: services.AddTransient(implementedInterface, type); break; } } }); } public static List<TypeInfo> GetTypesAssignableTo(this Assembly assembly, Type compareType) { var typeInfoList = assembly.DefinedTypes.Where(x => x.IsClass && !x.IsAbstract && x != compareType && x.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == compareType))?.ToList(); return typeInfoList; } }
2、Startup注入
// 注入泛型依赖项 services.AddClassesAsImplementedInterface(Assembly.Load("WebApplication2"), typeof(IServices<>));
3、接口实现类
public class User { } public class Role { } public class UserServices: IServices<User> { public async Task<string> GetData() { return await Task.FromResult("User服务实现类"); } public async Task<User> GetObj() { return await Task.FromResult(new User()); } } public class RoleServices:IServices<Role> { public async Task<string> GetData() { return await Task.FromResult("Role服务实现类"); } public async Task<Role> GetObj() { return await Task.FromResult(new Role()); } } public interface IServices<T> { Task<string> GetData(); Task<T> GetObj(); }
4、controll控制器实现
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly IServices<User> _userServices; private readonly IServices<Role> _roleServices; public HomeController(ILogger<HomeController> logger, IServices<User> userServices, IServices<Role> roleServices) { _logger = logger; _userServices= userServices; _roleServices= roleServices; } public async Task<IActionResult> Index() { { _logger.LogInformation($"{await _userServices.GetData()}"); _logger.LogInformation($"{await _userServices.GetObj()}"); } { _logger.LogInformation($"{await _roleServices.GetData()}"); _logger.LogInformation($"{await _roleServices.GetObj()}"); } return View(); } }
项目整体结构
友情链接:https://www.codenong.com/39320265/
相关文章推荐
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- Asp.Net Core 2.0 之旅---AutoFac 仓储泛型的依赖注入
- ASP.NET Core依赖注入——依赖注入最佳实践
- ASP.NET Core依赖注入多个服务实现类
- ASP.NET Core 注入和获取 AppSettings 配置
- ASP.NET Core依赖注入解读&使用Autofac替代实现
- ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
- ASP.NET - 使用依赖关系注入在 ASP.NET Core 中编写干净代码
- ASP.Net Core-依赖注入IoC
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
- Asp.NetCore3.1版本的CodeFirst与经典的三层架构与AutoFac批量注入
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
- ASP.NET Core 1.0 中的依赖项管理
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- ASP.NET Core 2.0 : 六. 举个例子来聊聊它的依赖注入
- ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
- ASP.NET Core WebApi基于JWT实现接口授权验证
- 用工厂模式解决ASP.NET Core中依赖注入的一个烦恼