[.NET] 使用Json.NET提供依赖注入功能(Dependenc…
2018-06-18 02:35:34来源:未知 阅读 ()
[.NET] 使用Json.NET提供依赖注入功能(Dependence Injection)
前言
在一些小型项目的开发情景里,系统不需要大型DI Framework所提供的:单一对象生成、生命周期管理...等等延伸功能,只需要,单纯使用反射生成功能,从配置文件取得功能对象来注入到系统。在这样的开发情景中,如果选择Spring .NET、Unity来做为系统的依赖注入模块,无形中就增加了系统的技术门坎、增加了开发人员的知识负担。
本篇文章介绍如何使用Json.NET来反射生成JSON配置文件中所定义的功能对象,让开发人员能够透过设定简单的JSON档案、简洁易懂的指令,来提供系统使用依赖注入的功能。主要为自己留个纪录,也希望能帮助到有需要的开发人员。
- Json.NET官网
开发
加入Json.NET
使用Visual Studio开启项目之后,开发人员可以透过内建的NuGet封装管理员来安装Json.NET套件。
建立依赖注入的接口与实作
建立项目并且加入Json.NET套件之后,就可以先着手在项目内,建立系统所需要依赖注入的接口与实作。
public interface IAnimal
{
// Methods
void Hit();
}
public class Dog : IAnimal
{
// Methods
public void Hit()
{
Console.WriteLine("Dog : " + "Running");
}
}
public class Cat : IAnimal
{
// Fields
private readonly string _cry = null;
// Constructors
public Cat(string cry)
{
// Default
_cry = cry;
}
// Methods
public void Hit()
{
Console.WriteLine("Cat : "+ _cry);
}
}
建立反射生成的配置文件
接着使用Json.NET所定义的格式,来建立对象反射生成所需要的JSON配置文件。在这份配置文件中,每个对象的「$type」属性使用逗号来切割内容。逗号前的内容,代表了这个对象的命名空间+类别名称;逗号后的内容代表了这个对象的组件名称。而其他「$type」之外的属性,则是会被剖析为对象的建构参数、对象属性。
[
{
"$type": "JsonDISample.Dog, JsonDISample"
},
{
"$type": "JsonDISample.Cat, JsonDISample",
"cry": "Meow"
},
{
"$type": "JsonDISample.Cat, JsonDISample",
"cry": "Purr"
}
]
使用Json.NET注入物件
最后使用下列程序代码,从档案中读取JSON配置文件内容,再使用JsonConvert.DeserializeObject反射生成对象,就可以将Json.NET生成的接口与实作,注入系统来使用。另外,在这段程序代码中,要特别注意「JsonSerializerSettings.TypeNameHandling」这个属性必须要设定为All,这样Json.NET才会特别去处理$type属性来反射生成指定对象。
static void Main(string[] args)
{
// ConfigJson
string configJson = System.IO.File.ReadAllText("animals.json");
if (configJson == null) throw new InvalidOperationException();
// SerializerSettings
var serializerSettings = new JsonSerializerSettings();
serializerSettings.TypeNameHandling = TypeNameHandling.All;
// Animal
var animalList = JsonConvert.DeserializeObject<List<IAnimal>>(configJson, serializerSettings);
if (animalList == null) throw new InvalidOperationException();
// Hit
foreach (var animal in animalList)
{
animal.Hit();
}
// End
Console.ReadLine();
}
执行
完成开发步骤后,就可以按下Visual Studio的执行按钮来检视成果。接着观察程序执行的结果,可以发现系统的确依照JSON配置文件的内容,动态生成对象、并且提供这些对象给系统使用。
范例下载
范例程序:点此下载
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
- c/c++ 使用valgrind检查内存泄漏 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash