zoukankan      html  css  js  c++  java
  • Unity的基础用法

       Unity的基础用法

        1、创建一个UnityContainer对象。
        2、通过UnityContainer对象的RegisterType方法来注册对象与对象之间的关系。
        3、通过UnityContainer对象的Resolve方法来获取指定对象关联的对象。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
    
    namespace UnityDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                IUnityContainer container = new UnityContainer();
                container.RegisterType<ILogger, ConsoleLogger>();
                ILogger logger = container.Resolve<ILogger>();
                logger.Log("hello world");
                Console.ReadLine();
            }
        }
    }
    

     有两种方式使用RegisterType,一种是代码,类似于ontainer.RegisterType<ILogger, ConsoleLogger>();

    一种是通过配置文件

    通过配置文件,需要引用Unity.Configuration类库,System.configuration类库为了避免xml输入错误,可以通过XSD文件开启智能感应,有下面两种方式


    方式1、在Visual Studio中选择XML选项卡,然后选择Schemas选项,在里面找到UnityConfiguration20.xsd文件,选择使用


    方式2、直接在XML配置文件中输入<unity xmlns=",然后在弹出的提示中选择http://schemas.microsoft.com/practices/2010/unity

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
      </configSections>
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <container>
          <register type="UnityDemo.ILogger,UnityDemo" mapTo="UnityDemo.FileLogger,UnityDemo"></register>
        </container>
      </unity>
    </configuration>
    

     当配置过多是,可以单独建个unity.config

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
    using System.Configuration;
    
    namespace UnityDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                IUnityContainer container = new UnityContainer();
                UnityConfigurationSection section = GetUnityConfigurationSection("unity.config");
                container.LoadConfiguration();
                ILogger logger = container.Resolve<ILogger>();
                logger.Log("hello world");
                Console.ReadLine();
            }
    
            public static UnityConfigurationSection GetUnityConfigurationSection(string configFile)
            {
                var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = HttpContext.Current.Server.MapPath(configFile)  };
                Configuration configuration =ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
                return (UnityConfigurationSection)configuration.GetSection("unity");  
            }
        }
    }
    

     的配置文件中,要求类型一定要写成型如:“namespace.typename,assemblyname”的类型全名。这使得的配置文件一下子变的非常臃肿,难以维护。在Unity中提供了一种名为Automatic Type Lookup的机制来解决这一问题

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
      </configSections>
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <namespace name="UnityDemo"/>
        <assembly name="UnityDemo"/>
        <container>
          <register type="ILogger" mapTo="FileLogger"></register>
        </container>
      </unity>
    </configuration>
    
  • 相关阅读:
    [转]OOA/OOD/OOP区别
    Get / Post
    1.PHP环境搭配
    6.WCF Rest
    消除关闭按钮时的IE弹出提示
    TSQL DML学习笔记
    javascript 中类的定义
    $().each() 与 $.each()区别,以及 jquery ajax 应用
    TSQL 数据库的创建
    删除用户表 存储过程 索引..
  • 原文地址:https://www.cnblogs.com/50614090/p/2334866.html
Copyright © 2011-2022 走看看