尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

.net 8使用autofac以及.net core自带的注入

.net 8使用autofac以及.net core自带的注入
📅 发布时间:2026/6/19 16:47:14
.net 8配置Autofac
var builder = WebApplication.CreateBuilder(args);// Add services to the container.//autofac注册到builder
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());//服务注册到autofac
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{// 示例1:注册单个服务(作用域生命周期)containerBuilder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();// 示例2(推荐):批量注册程序集中所有服务containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerLifetimeScope();
});

 2.手动批量注入

        public static void AddBusinessServicesForSQLSugar(this IServiceCollection services){var basePath = AppContext.BaseDirectory;var servicesDllFile = Path.Combine(basePath, "MedicTechService.dll");var sugarRepositoryDllFile = Path.Combine(basePath, "MedicTech.Repository.dll");// 加载程序集var serviceAssembly = Assembly.LoadFrom(servicesDllFile);var sugarRepositoryAssembly = Assembly.LoadFrom(sugarRepositoryDllFile);// 自动注册泛型 Repositoryvar baseRepositoryInterface = typeof(IBaseRepository<,>);var baseRepositoryImplementation = typeof(MedicTech.Repository.Base.BaseRepository<,>);// Fix for CS0119: Ensure the correct syntax is used for registering services in the IServiceCollection.services.AddScoped<IUnitOfWorkManage, UnitOfWorkManage>();services.AddScoped(baseRepositoryInterface, baseRepositoryImplementation);//  获取服务程序集中定义的所有接口var serviceInterfaceTypes = serviceAssembly.GetTypes().Where(t => t.IsInterface).ToDictionary(t => t.Name, t => t);var repositoryTypes = sugarRepositoryAssembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.Name.EndsWith("Repository") && !t.IsGenericType).ToList();foreach (var repoType in repositoryTypes){//var interfaceType = repoType.GetInterfaces()//    .FirstOrDefault(i => i.Name == $"I{repoType.Name}");var expectedInterfaceName = $"I{repoType.Name}";//if (interfaceType != null)//{//    services.AddSingleton(interfaceType, repoType);//}// 在服务程序集中查找匹配的接口if (serviceInterfaceTypes.TryGetValue(expectedInterfaceName, out var interfaceType)){// 确保实现类确实实现了该接口if (interfaceType.IsAssignableFrom(repoType)){services.AddScoped(interfaceType, repoType);}else{// 处理不匹配的情况(记录日志或抛出异常)throw new InvalidOperationException($"Repository {repoType.FullName} does not implement expected interface {interfaceType.FullName}");}}else{// 处理接口未找到的情况throw new TypeLoadException($"Could not find interface {expectedInterfaceName} in assembly {serviceAssembly.FullName}");}}var serviceTypes = serviceAssembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.Name.EndsWith("Services")).ToList();foreach (var serviceType in serviceTypes){var interfaceType = serviceType.GetInterfaces().FirstOrDefault(i => i.Name == $"I{serviceType.Name}");if (interfaceType != null){services.AddScoped(interfaceType, serviceType);}}}

 

3.使用Autofac批量注册

//MedicTechRep类库和MedicTechServer的API
//Program.cs
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
var assemblysServices = Assembly.Load("MedicTechRep");containerBuilder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces()// 将类型注册为它实现的所有接口。.InstancePerLifetimeScope()//.InstancePerLifetimeScope().EnableInterfaceInterceptors();//启用接口拦截器,用于 AOP(面向切面编程)
//注册第二个类库(这个类库不适用接口,直接用服务类  AsImplementedInterfaces  EnableInterfaceInterceptors)
  var path2 = Path.Combine(basePath, "MedicTechRep2.dll");或者使用路径来注册
  var assemblysServices_2 = Assembly.LoadFrom(path2);
  containerBuilder.RegisterAssemblyTypes(assemblysServices)
});
//控制类(注意使用注册的服务必须使用接口,直接使用类报错)
private readonly IClass1 _class1;
public LoginRegisterController(IClass1 class1)
:base() 
{_class1 = class1;
}[HttpGet("logintest")]
public async Task<ResponseBase> Getlogintest()
{ResponseBase res = new ResponseBase();res.Data = _class1.InputString();return res;
}

 

静,静,静

相关新闻

  • GSoC 成果公布!印度开发者为 DolphinScheduler 引入通用 OIDC 认证,实现无缝安全访问
  • 面向轻量级智能体的模型蒸馏方法研究-大规模预训练模型知识迁移机制分析
  • [20251219]测试sql语句子光标的执行性能2(21c).txt

最新新闻

  • 零代码跨平台UI自动化实践:Midscene.js核心原理与场景驱动开发
  • 2026长春防水补漏维修团队实测盘点TOP4:长春业主房屋渗漏修缮靠谱选择 - 宅安选房屋修缮
  • 苏州 GEO 优化公司怎么选?实测对比后,优先推荐企优托一网推王超团队 - 新闻快传
  • Th1 +
  • Gemma 4部署全指南:Apache 2.0开源模型的全设备多模态实战
  • Tdiv

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号