尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Czar.Cms配置文件与AutoFac依赖注入实战:如何构建自动扫描整个程序集的DI容器
Czar.Cms配置文件与AutoFac依赖注入实战如何构建自动扫描整个程序集的DI容器【免费下载链接】Czar.Cms.NET Core实战项目之CMS系列教程的源码精简而又功能丰富的权限设计内容管理设计让你轻松搭建一个ASP.NET Core2.2的网站系统.此项目准备用EFCore进行重构敬请期待项目地址: https://gitcode.com/gh_mirrors/cz/Czar.CmsCzar.Cms 是一个精简而功能丰富的 .NET Core CMS 系统源码内置权限管理、内容管理与定时任务。本文带你实战解析 Czar.Cms 的配置文件体系与 AutoFac 依赖注入玩法从 appsettings.json 读取数据库配置到用几行代码构建一个自动扫描整个程序集的 DI 容器让 Repository 与 Service 层零手动注册。 项目一览Czar.Cms 的分层结构Czar.Cms 采用经典的分层架构整个解决方案位于src/目录各层职责清晰项目职责Czar.Cms.Admin后台管理站点MVC 配置入口Czar.Cms.Core基础设施连接工厂、缓存、帮助类Czar.Cms.Models / ViewModels实体模型与视图模型Czar.Cms.IRepository / IServices仓储层、业务层的接口Czar.Cms.Repository.SqlServer / Services仓储层、业务层的实现Czar.Cms.Quartz / Job定时任务调度中心与任务 正是靠下面要讲的配置文件 AutoFac 容器各层才能在Startup.cs启动时即插即用最终渲染出这个后台登录页。 配置文件实战连接串到底放在哪1. 核心配置都在 appsettings.jsonCzar.Cms 的 Web 配置入口是 appsettings.json数据库相关配置集中在DbOpion节中DbOpion: { ConnectionString: Data Source.;Initial CatalogCzarCms;User IDsa;Password1;..., DbType: SqlServer }开发环境则通过 appsettings.Development.json 覆盖日志级别——ASP.NET Core 会按环境合并策略自动叠加两个文件你只需要改对应环境的文件即可互不干扰。2. 配置绑定成强类型选项类裸读字符串不如绑定成类。Czar.Cms 在 DbOption.cs 中定义了只有ConnectionString和DbType两个属性的选项类然后在 Startup.cs 中一行完成绑定services.ConfigureDbOption(CzarCms, Configuration.GetSection(DbOpion));注意这里多了一个选项名CzarCms配合IOptionsSnapshotDbOption的options.Get(CzarCms)使用意味着同一应用可以绑定多份不同来源的配置互不串扰。3. 日志配置独立成 Nlog.config日志由 NLog 负责规则写在 Nlog.config 中Czar.Cms.*命名空间下的日志写入数据库NLog表而Microsoft.*的框架日志全部扔进黑洞。该文件通过 csproj 中的CopyToOutputDirectory配置保证发布时随站点一起输出。 AutoFac 构建 DI 容器四步法自动扫描程序集C# 依赖注入的精髓是面向接口编程 运行时装配。Czar.Cms 没有用框架默认的AddScoped逐个注册而是引入 AutoFac用类型命名约定一次性装配整个程序集。核心代码在 Startup.csvar builder new ContainerBuilder(); builder.Populate(services); // 第1步把 Microsoft DI 的服务搬进 AutoFac builder.RegisterAssemblyTypes(typeof(ManagerRoleRepository).Assembly) .Where(t t.Name.EndsWith(Repository)) .AsImplementedInterfaces(); // 第2步扫描仓储层程序集 builder.RegisterAssemblyTypes(typeof(ManagerRoleService).Assembly) .Where(t t.Name.EndsWith(Service)) .AsImplementedInterfaces(); // 第3步扫描业务层程序集 return new AutofacServiceProvider(builder.Build()); // 第4步接管服务提供四步法拆解如下步骤代码作用①Populate(services)合并容器前面AddMvc、AddSession等注册的服务对 AutoFac 可见②RegisterAssemblyTypes(...)自动扫描反射遍历整个程序集里的所有类型③.Where(...).AsImplementedInterfaces()约定注册只要类名以约定后缀结尾就按它实现的接口注册④AutofacServiceProvider接管整个应用从此由 AutoFac 统一解析实例 约定大于配置命名即注册这套玩法的钥匙是命名约定——类名必须以 Repository 或 Service 结尾。例如 ManagerRoleRepository.cs 中public class ManagerRoleRepository : BaseRepositoryManagerRole, int, IManagerRoleRepository { public ManagerRoleRepository(IOptionsSnapshotDbOption options) { _dbOption options.Get(CzarCms); _dbConnection ConnectionFactory.CreateConnection(_dbOption.DbType, _dbOption.ConnectionString); } }可以看到仓储的构造函数通过IOptionsSnapshotDbOption注入配置再由 ConnectionFactory.cs 按DbType创建 SqlServer / MySQL / PostgreSQL 三种连接——换数据库只改配置不改代码。后续新增业务模块时你只需要在Czar.Cms.IRepository里写接口IXxxRepository在Czar.Cms.Repository.SqlServer里写XxxRepository实现命名以Repository结尾——完成无需回到 Startup.cs 改一行代码。这就是自动扫描整个程序集的价值注册逻辑从每个类一行代码变成一个规则扫一遍漏注册的可能性基本归零。⚠️ 实战要点与常见坑 节名必须一字不差appsettings.json中的节名是DbOpion作者的小拼写失误代码里GetSection(DbOpion)必须与之完全一致否则绑定出来是 null运行时才炸。 单例要单独注册如ScheduleCenter这类带状态的服务用services.AddSingletonScheduleCenter()显式注册Startup.cs不要交给约定扫描。 扫描范围要精准RegisterAssemblyTypes是按程序集扫描的仓储与业务分属两个程序集分别注册避免把不该注册的类型扫进来。 Populate 不能少忘记builder.Populate(services)是最常见的坑症状是AutoFac 解析不到 IMvcBuilder 系的服务报错信息往往还很迷惑。 小结能力Czar.Cms 的做法多环境配置appsettings.json 环境文件自动合并强类型配置services.ConfigureDbOption(CzarCms, ...)命名选项依赖注入AutoFac 四步法 命名约定自动扫描多数据库支持ConnectionFactory 按 DbType 分派连接配置决定系统怎么连DI 容器决定系统怎么活。读懂了 Czar.Cms 的这套组合拳你在自己的 ASP.NET Core 项目里也可以轻松搭出命名即注册的自动装配体系。【免费下载链接】Czar.Cms.NET Core实战项目之CMS系列教程的源码精简而又功能丰富的权限设计内容管理设计让你轻松搭建一个ASP.NET Core2.2的网站系统.此项目准备用EFCore进行重构敬请期待项目地址: https://gitcode.com/gh_mirrors/cz/Czar.Cms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

c++--运算符重载和函数重载

c++--运算符重载和函数重载

目录 1. 函数重载 1.1 定义: 1.2 特点: 1.3 函数重写(Function Overriding) 2.运算符重载 运算符重载的基本概念 1. 函数重载 1.1 定义: 函数重载允许在同一个作用域中定义多个同名函数,它们的参数…

📅 2026/11/13 3:37:59
Agent形态频变,Infra该为谁而建?一套不绑定框架的底座设计

Agent形态频变,Infra该为谁而建?一套不绑定框架的底座设计

最近在推进 Agent 类项目时,我发现最让人头疼的其实不是 Agent 本身怎么写,而是底层的 Infra 到底应该怎么搭。今天选一套自研 Agent 执行引擎,明天团队又想切更抽象的多 Agent 编排框架,后天产品又要求给每个 Agent 挂上记忆和工…

📅 2026/10/16 0:28:11
MLPerf推理冠军GH200深度解析:架构优势与部署实践

MLPerf推理冠军GH200深度解析:架构优势与部署实践

MLPerf Inference v4.0的成绩单出来那几天,我所在的技术群里基本都在聊Grace Hopper Superchip。这个名字不好念,但成绩不难懂——同一套大语言模型推理负载下,GH200把上一代纯GPU方案甩开一大截,尤其在做离线批量推理和在线服务场…

📅 2026/10/31 18:42:16
MORE NEWS

更多资讯

📰

精神病考电工证官方回应来了,证书过期了不知道怎么复审延期怎么办?

精神病考电工证官方回应来了,证书过期了不知道怎么复审延期怎么办? 证书过期了不知道怎么复审延期,这个问题在南阳卧龙区的电工从业者中普遍存在。尤其是那些原本就对流程不熟悉的新手,或者因特殊原因(比如精神病考电工证)在报考和后续管理上遇到阻碍的…

📰

特种工白老师真实经历:工地太忙根本没时间复习考试怎么办

特种工白老师真实经历:工地太忙根本没时间复习考试怎么办 工地太忙根本没时间复习考试,这是无数一线特种作业人员的真实写照。特种工白老师就是其中一位,他之前在洛阳一家公路工程公司做高压电工,每天早上六点起床,晚上十点才能下班,中间还要处理各种临…

📰

国考低压电工证好考吗多久拿证怎么报名更靠谱

国考低压电工证好考吗多久拿证怎么报名更靠谱 不知道去哪报名怕被中介坑?国考低压电工证好考吗多久拿证?你不是一个人,我之前也在许昌一家中小型施工企业当技术员,天天被老板催着考证,结果到处打听,发现这证真不好搞,关键是不知道该信谁。今天我就从一…

📰

交运驾校能办电工证吗值不值得考

交运驾校能办电工证吗值不值得考 实操考试心里没底怕挂科,尤其是第一次接触特种作业证书考试的学员,对流程、题型、考场规则都一无所知,很容易在考试中掉链子。很多学员在报名前都会问“交运驾校能办电工证吗”,但大多数人忽略了“值不值得考”这个更关键…

📰

特种工白老师怎么考?官方报名入口全攻略

特种工白老师怎么考?官方报名入口全攻略 实操考试心里没底怕挂科,这几乎是所有准备考特种作业操作证的朋友心里的共同声音。尤其是像安阳房建工程这类需要持证上岗的行业,没有证书,连进场都难。今天就从【特种工白老师】的角度,一步步带你了解怎么考、怎…

📰

兴义电工证培训花费保姆级教程:没证别想上岗,这本证决定你工资高低

兴义电工证培训花费保姆级教程:没证别想上岗,这本证决定你工资高低 现在电工证成了找工作必备的门槛,特别是像你这样在驻马店做房建工程的,没有电工证连工地都进不去。别再想着先干着干着再考证了, 电工证是硬门槛 , 兴义电工证培训花费…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬