Asp.Net Core中注入泛型接口的依赖项
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 ListGetTypesAssignableTo(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{ public async Task<string> GetData() { return await Task.FromResult("User服务实现类"); } public async Task GetObj() { return await Task.FromResult(new User()); } } public class RoleServices:IServices { public async Task<string> GetData() { return await Task.FromResult("Role服务实现类"); } public async Task GetObj() { return await Task.FromResult(new Role()); } } public interface IServices { Task<string> GetData(); Task GetObj(); }
4、controll控制器实现
public class HomeController : Controller { private readonly ILogger_logger; private readonly IServices _userServices; private readonly IServices _roleServices; public HomeController(ILogger logger, IServices userServices, IServices roleServices) { _logger = logger; _userServices= userServices; _roleServices= roleServices; } public async Task 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/