IOC unity 使用

首先下载UNITY WED 和BLL项目引入Microsoft.Practices.Unity.DLL 和Microsoft.Practices.Unity.Configuration.DLL

项目架构

App.config 配置如下

typeAlias节点是给不太容易识记的类型名起一个别名(似乎有点废话),让一个拥有很我字符的类型名“变”短点。 
 container节点定义管理依赖关系和生命周期的容器(Ioc容器概念),需要在配置中提供一个名称。
 type节点从其mapTo属性就可以看出其用途了,它提供依赖关系和生命周期的具体定义。
<type type="ITest" mapTo="Test" name="aTest"></type> 是ITest依赖Test
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <typeAliases>
      <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
      <typeAlias alias="Test" type="ConsoleApplication1.Test,ConsoleApplication1" />
      <typeAlias alias="ITest" type="ConsoleApplication1.ITest,ConsoleApplication1" />

      <typeAlias alias="BLLTest" type="BLL.Test,BLL" />
      <typeAlias alias="IBLLTest" type="IBLL.ITest,IBLL" />

      <typeAlias alias="DALTest" type="DAL.DALTest,DAL" />
      <typeAlias alias="IDALTest" type="IDAL.IDALTest,IDAL" />
    </typeAliases>
    <containers>
      <container name="containerOne">
        <types>
          <type type="ITest" mapTo="Test" name="aTest"></type>
          <type type="IBLLTest" mapTo="BLLTest" name="aITest"></type>

          <type type="IDALTest" mapTo="DALTest" name="aIDALTest"></type>
        </types>
      </container>
    </containers>
  </unity>
</configuration>

注意:WEB层必须引用下面所有层

IBLL.TEST.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IBLL
{
    public interface ITest
    {
        string say(string test);
    }
}

BLL.TEST.cs

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using IBLL;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

namespace BLL
{
    public class Test : ITest
    {
        public string say(string test)
        {
            UnityContainer myContainer = new UnityContainer();
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            section.Containers["containerOne"].Configure(myContainer);
            IDAL.IDALTest IBLLTestss = myContainer.Resolve<IDAL.IDALTest>("aIDALTest");

            return "BLL.Test->" + IBLLTestss.say("SSS");
            
        }
    }
}

IDAL.IDALTest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDAL
{
    public interface IDALTest
    {
        string say(string test);
    }
}

DAL.IDALTest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IDAL;

namespace DAL
{
    public class DALTest:IDALTest
    {
        public string say(string test)
        {
            return "DAL.DALTest->" + test;
        }
    }
}
posted @ 2014-07-25 17:17  feimon  阅读(174)  评论(0)    收藏  举报