zoukankan      html  css  js  c++  java
  • 关于读取Unity 配置的方案

    Unity 是常用的Ioc 工具

    一般情况下用一个 xml来对Unity 进行配置

    常见方案有两种,一种是将配置写入到app.config/web.config

    我们假设现有接口 ILogger   实现此接口的类分别为SpecialLogger 和CommonLogger 对象

    假设我们的工程项目叫做SSHConsole (生成的assembly 也是 SSHConsole.dll)


    此时为了解耦我们应用程序中同时引用ILogger和它的实现类,

    我们将此耦合写入配置文件(app.config/web.config)中


    其中configSections中的section name = “unity” 为对Unity 的引用(必备)

    之后unity 节点包含了一个默认的container,用于存放Ioc的关系

    里面可以包含多个register

    这里的register 中指定了来自于assembly为SSHConsole(来自于SSHConsole.dll) SSHConsole.ILogger 这个接口/类,映射到 来自于assembly为SSHConsole(来自于SSHConsole.dll) SSHConsole.SpecialLogger

    这里有一个地方需要注意,为什么我们需要如此详细的写出这个type 和mapTo,这是因为配置文件是独立于项目的,它不知道项目中的任何细节,所以你必须要在这里告诉它这个是来自于哪个Dll 的那个namespace的那个类,这样,它才能明确的知道(信息将用于反射生成对象)。

    之后如果有大量的register 需要写的话,我们也有简便的方法,就是直接告诉unity 在哪些dll,以及哪个namespace 下  搜索,甚至可以命名一个别名,直接代替复杂的字符串。

    比如上面的例子的unity 节点也可以写成:


    之后在Program 里调用的话,十分简单

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Data.OleDb;
    using System.Data;
    using System.Configuration;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
    namespace SSHConsole
    {
        class Program
        {
            static void Main(string[] args)
            {
                //此处需要手动引用Microsoft.Practices.Unity.Configuration,才能使用LoadConfiguration扩展方法
    
                IUnityContainer container = new UnityContainer().LoadConfiguration();
                //获得默认Container容器,从web.config/app.config 配置文件中
    
    
                var obj = container.Resolve<ILogger>();
                //此处解除了实际对象和Program的耦合关系,Program 不需要再引用SpecialLogger
                
                obj.Logging();
                Console.ReadLine();
            }
        }
    }
    
  • 相关阅读:
    网易数帆实时数据湖 Arctic 的探索和实践
    私有化场景下大规模云原生应用的交付实践
    Apache Kyuubi 在 T3 出行的深度实践
    Win7 32位原版镜像无法安装VMware Tools
    VB.NET代码转C#的方法
    ArcGIS Pro导入OSGB倾斜摄影数据
    基于倾斜摄影测量的三维建模实验
    解决QTTabBar标签不能置顶的问题
    GIS中图斑椭球面积的计算
    ISaveAs导出栅格显示异常
  • 原文地址:https://www.cnblogs.com/jicheng1014/p/1875497.html
Copyright © 2011-2022 走看看