能否用appsettings.json替代app.config、Unity.json替代Unity.config实现Unity IOC配置?
能否用appsettings.json替代app.config,Unity.json替代Unity.config完成配置?
当然可以!不过具体实现要分两部分来看——应用设置(对应原来的appSettings节点)和Unity依赖注入配置(对应Unity.config),而且还要注意你使用的Unity容器版本,毕竟旧版的Microsoft.Practices.Unity原生只支持XML配置。下面一步步给你说明:
一、替换app.config的appSettings为appsettings.json
不管是.NET Core/.NET 5+还是传统.NET Framework项目,都可以用appsettings.json来存储应用配置,只是读取方式略有不同:
1. 编写appsettings.json
把原来的DateFormat配置转成JSON格式就行:
{ "AppSettings": { "DateFormat": "yyyyMMdd" } }
2. 读取配置
- 在.NET Core/.NET 5+项目中:原生支持通过
IConfiguration读取,默认项目模板已经配置好相关逻辑,直接注入IConfiguration就能获取值:
public class YourService { private readonly string _dateFormat; public YourService(IConfiguration configuration) { _dateFormat = configuration["AppSettings:DateFormat"]; } }
- 在传统.NET Framework项目中:需要安装
Microsoft.Extensions.Configuration.Json及相关依赖包,然后手动构建配置对象来读取:
using Microsoft.Extensions.Configuration; var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); string dateFormat = config["AppSettings:DateFormat"];
二、替换Unity.config为Unity.json
这里要注意:旧版的Microsoft.Practices.Unity.Configuration(就是你用的XML配置对应的包)没有原生支持JSON配置,所以得用下面两种方案之一:
方案1:自己写代码读取JSON并注册到Unity
这是最灵活的方式,不用改动Unity版本。先定义一个和原来XML配置对应的JSON结构:
Unity.json示例
{ "Aliases": [ { "Alias": "IHelpfulRepository", "Type": "Repositories.IHelpfulRepository, Repositories" }, { "Alias": "HelpfulRepository", "Type": "Repositories.Implementation.HelpfulRepository, Repositories" } ], "Registrations": [ { "From": "IHelpfulRepository", "To": "HelpfulRepository" } ] }
然后编写代码读取这个JSON,手动把别名和注册项添加到Unity容器中:
using Microsoft.Practices.Unity; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; // 先定义对应JSON的模型类 public class UnityConfig { public List<AliasEntry> Aliases { get; set; } public List<RegistrationEntry> Registrations { get; set; } } public class AliasEntry { public string Alias { get; set; } public string Type { get; set; } } public class RegistrationEntry { public string From { get; set; } public string To { get; set; } } // 读取配置并初始化容器 var container = new UnityContainer(); var configJson = File.ReadAllText("Config/Unity.json"); var unityConfig = JsonConvert.DeserializeObject<UnityConfig>(configJson); // 注册别名 foreach (var alias in unityConfig.Aliases) { var targetType = Type.GetType(alias.Type); if (targetType != null) { container.RegisterType(targetType, alias.Alias); } } // 注册依赖关系 foreach (var reg in unityConfig.Registrations) { var fromType = container.Resolve<Type>(reg.From); var toType = container.Resolve<Type>(reg.To); container.RegisterType(fromType, toType); }
方案2:升级到支持JSON配置的Unity版本
如果不想自己写代码,可以考虑升级到更现代的Unity容器版本,比如一些第三方扩展或者更新的UnityContainer包(比如Unity.Configuration.Json,需注意包的兼容性)。另外,如果你是在.NET Core项目中,也可以考虑直接使用.NET Core原生的DI系统,它原生支持JSON配置,生态也更完善。
几个关键提醒
- 如果你还在维护传统.NET Framework项目,用JSON配置需要额外引入NuGet包,比如
Microsoft.Extensions.Configuration系列配置读取包。 - 旧版
Microsoft.Practices.Unity没有JSON配置的原生支持,自定义读取逻辑是最稳妥的方案。 - 要是你已经升级到**.NET Core/.NET 5+**,更推荐用原生的
IConfiguration管理应用设置,同时考虑切换到原生DI或者支持JSON的现代DI容器,这样更贴合当前的.NET生态。
内容的提问来源于stack exchange,提问作者duo maxwell
相关产品推荐
相关产品推荐

