zoukankan      html  css  js  c++  java
  • Json.NET提供依赖注

    Json.NET提供依赖注

    [.NET] 使用Json.NET提供依赖注入功能(Dependence Injection)

    前言

    在一些小型项目的开发情景里,系统不需要大型DI Framework所提供的:单一对象生成、生命周期管理...等等延伸功能,只需要,单纯使用反射生成功能,从配置文件取得功能对象来注入到系统。在这样的开发情景中,如果选择Spring .NET、Unity来做为系统的依赖注入模块,无形中就增加了系统的技术门坎、增加了开发人员的知识负担。

    本篇文章介绍如何使用Json.NET来反射生成JSON配置文件中所定义的功能对象,让开发人员能够透过设定简单的JSON档案、简洁易懂的指令,来提供系统使用依赖注入的功能。主要为自己留个纪录,也希望能帮助到有需要的开发人员。

    前言01

    开发

    加入Json.NET

    使用Visual Studio开启项目之后,开发人员可以透过内建的NuGet封装管理员来安装Json.NET套件。

    开发01

    建立依赖注入的接口与实作

    建立项目并且加入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配置文件的内容,动态生成对象、并且提供这些对象给系统使用。

    执行01

    范例下载

    范例程序:点此下载

  • 相关阅读:
    swift知识点 [1]
    Scala的安装,入门,学习,基础
    导入别人的项目源码,如何才可以正常运行呢???
    java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
    网站点击流数据分析项目----之现学现卖
    我的博客即将搬运同步至腾讯云+社区
    sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
    工作流调度器azkaban(以及各种工作流调度器比对)
    日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)
    Hive thrift服务(将Hive作为一个服务器,其他机器可以作为客户端进行访问)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4752869.html
Copyright © 2011-2022 走看看