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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM