IOC容器Unity的使用及獨立配置文件Unity.Config


【本段摘錄自:IOC容器Unity 使用 http://blog.csdn.net/gdjlc/article/details/8695266】

面向接口實現有很多好處,可以提供不同靈活的子類實現,增加代碼穩定和健壯性等,但是接口一定是需要實現的,如果一個子類實現換成另一個子類實現,就需要在代碼中改動,或者建立一個工廠來根據條件生成,還是存着着一定的耦合關系。
依賴注入(Dependency Injection,DI),也叫控制反轉(Inversion of Control,IoC)是一個重要的面向對象編程的法則用來削減程序的耦合問題,它把耦合從代碼中移出去,放到統一的XML文件中,通過一個容器在需要的時候把這個依賴關系形成,即把需要的接口實現注入到需要它的類中,當需要換一個實現子類將會變成很簡單(一般這樣的對象都是實現於某種接口的),只要修改XML就可以,這樣可以實現對象的熱插撥(有點象USB接口)。

Unity 是一個輕量級、可擴展的依賴注入容器,支持構造函數、屬性和方法的依賴注入。

1.C# Unity使用(獨立配置文件unity.config)

重要內容摘錄:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity configSource="unity.config" />
</configuration>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <!--alias 定義別名-->
  <alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" />
  <alias alias="MyClass" type="ConsoleApplication1.MyClass, ConsoleApplication1" />
  <!--引入下面的命名空間,可以省的輸入過多的內容-->
  <namespace name="ConsoleApplication1" />
  <assembly name="ConsoleApplication1" />
  
  <container >
    <register type="IClass" mapTo="MyClass" />
    <register type="ILogger" mapTo="FileLogger"></register>
    
    <!--註冊類+構造函數 默認數值是3-->
    <register type="InstallerBase" mapTo="BlogInstaller">
      <constructor>
        <param name="pubContext" type="IPubContext" />
        <param name="sum" type="System.Int32" value="3" />
      </constructor>
    </register>

    <!--<register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/>-->
    <register type="ISomeInterface[System.Int32]" mapTo="MyTypeImplementingSomeInterface[System.Int32]"/>

    
    <register type="ObjectWithOverloads" name="callFirstOverload">
      <method name="CallMe">
        <param name="param" type="int" value="17"/>
      </method>
    </register>

    <register type="ILogger" mapTo="MockLogger" name="validLogger" />
    <register type="ObjectUsingLogger" name="dependencyRegistered">
      <property name="Logger">
        <optional name="validLogger" />
      </property>
    </register>
    <!--數值-->
    <register type="ILogger" name="main" mapTo="MockLogger" />
    <register type="ILogger" name="another" mapTo="MockLogger" />
    <register type="ILogger" name="special" mapTo="SpecialLogger" />
    <register type="ArrayDependencyObject" name="specificElements">
      <property name="Loggers">
        <array>
          <dependency name="main" />
          <dependency name="another" />
        </array>
      </property>
    </register>
  </container>
  
</unity>
View Code

 2. Using Unity for IoC and DI(codeproject國外網站給出的如何將unity.config作為web.config或者app.config的獨立配置文件來引入)

<configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <unity configSource="unity.config"/>

此處給出unity.config文件的具體代碼:

<?xml version="1.0" encoding="utf-8"?>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <typeAliases>
    <!-- Models-->
    <typeAlias alias="IBook" type="BusinessBackend.IBook, BusinessBackend" />
    <typeAlias alias="Book" type="BusinessBackend.Book, BusinessBackend" />
    <!-- Services -->
    <typeAlias alias="IBookService" type="BusinessBackend.IBookService, BusinessBackend" />
    <typeAlias alias="BookService" type="BusinessBackend.BookService, BusinessBackend" />
    <!-- Repositories -->
    <typeAlias alias="IBookRepository" type="BusinessBackend.IBookRepository, BusinessBackend" />
    <typeAlias alias="BookRepository" type="BusinessBackend.BookRepository, BusinessBackend" />
  </typeAliases>
  <container>
    <register type="IBook" mapTo="Book" />
    <register type="IBookRepository" mapTo="BookRepository" name="SQLrepo" />
    <register type="IBookService" mapTo="BookService" >
      <constructor>
        <param name="br" dependencyName="SQLrepo">
        <!--<param name="br" dependencyType="BookRepository">-->
        <!--<dependency type="BookRepository" />-->
        <!--<dependency name="SQLrepo" />-->
        </param>
      </constructor>
    </register>
  </container>
</unity>
View Code

 

3.Unity 2.0 Web.config settings with MVC(使用unity的答疑帖子)

http://stackoverflow.com/questions/3925019/unity-2-0-web-config-settings-with-mvc

 

 

 


免責聲明!

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



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