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>

 

posted @ 2012-02-01 17:03  虎头  阅读(5020)  评论(0编辑  收藏  举报