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();
            }
        }
    }
    
  • 相关阅读:
    EChart处理三维数据做图表、多维legend图例处理
    详解Vuex常见问题、深入理解Vuex
    解决vuex在页面刷新后数据丢失的问题
    vue-router路由元信息详解
    修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题
    ab.exe使用
    项目经验
    消息队列系列(一):.Net平台下的消息队列介绍
    【转】谈基于SOA的应用系统设计和开发
    2015年12周(2015-03-16~2015-03-22)
  • 原文地址:https://www.cnblogs.com/jicheng1014/p/1875497.html
Copyright © 2011-2022 走看看