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

 

 

 

转载于:https://www.cnblogs.com/wangqiideal/p/6289017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉之前的回答有误,我理解你的意思了。在 .NET 4.6.2 中,你可以通过使用 Autofac.Configuration 库来从配置文件中读取注册信息。 首先,你需要在应用程序中添加 Autofac 和 Autofac.Configuration 的 NuGet 包。然后,你可以创建一个名为 autofac.xml 的配置文件,并将其添加到应用程序的根目录中。 在 autofac.xml 文件中,你可以使用 XML 标签来定义注册信息。例如,下面是一个将 ILogger 注册为单例的示例: ``` <?xml version="1.0" encoding="utf-8"?> <autofac xmlns="http://schemas.autofac.org/configuration"> <components> <component type="MyApp.Logging.Logger, MyApp" service="MyApp.Logging.ILogger" instance-scope="single-instance" /> </components> </autofac> ``` 在代码中,你可以使用 ConfigurationBuilder 类来加载这个配置文件,并将其中的注册信息添加到 ContainerBuilder 中。例如: ``` var builder = new ContainerBuilder(); var config = new ConfigurationBuilder(); config.RegisterModule(new ConfigurationSettingsReader("autofac")); builder.RegisterModule(new ConfigurationSettingsReader("autofac")); var container = builder.Build(); ``` 在这个示例中,我们首先创建一个 ConfigurationBuilder 实例,然后使用 RegisterModule() 方法将其传递给 ConfigurationSettingsReader 类的构造函数。接下来,我们使用 RegisterModule() 方法将 ConfigurationSettingsReader 实例添加到 ContainerBuilder 中。最后,我们调用 Build() 方法来创建容器。 一旦你的组件被注册到容器中,你就可以通过调用 Resolve() 方法来解析它们。例如: ``` var logger = container.Resolve<ILogger>(); logger.Log("Hello, world!"); ``` 这将会从容器中解析 ILogger 实例,并调用其 Log() 方法。 希望这可以帮助你开始使用 Autofac 的配置文件注册功能!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值