zoukankan      html  css  js  c++  java
  • 連載 Unity を使ってコードで依存性を注入する

    Unity を使ってコードで依存性を注入する

    はじめに

      今回は依存性注入の簡単なサンプルを作成してみました。

    1 インタフェースを用意

    1 namespace UnityDemo002
    2 {
    3 public interface ILogger
    4 {
    5 //メッセージを出力する
    6 void Write(string message);
    7 }
    8 }

    メッセージを出力するメソッドだけのインタフェース。


    2 インタフェースを実装するクラスを用意

     1 namespace UnityDemo002
    2 {
    3 public class TextFileLogger : ILogger
    4 {
    5 public void Write(string message)
    6 {
    7 Console.WriteLine("Writed Log To File:\t" + message);
    8 }
    9 }
    10
    11 }
    12
    13 namespace UnityDemo002
    14 {
    15 public class DatabaseLogger : ILogger
    16 {
    17 public void Write(string message)
    18 {
    19 Console.WriteLine("Writed Log To Database:\t" + message);
    20 }
    21 }
    22
    23 }

    3 注入配置

     1 <?xml version="1.0" encoding="utf-8" ?>
    2 <configuration>
    3 <!--Unity配置-->
    4 <configSections>
    5 <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
    6 </configSections>
    7 <unity>
    8 <!--別名配置-->
    9 <typeAliases>
    10 <typeAlias alias="DatabaseLogger" type="UnityDemo002.DatabaseLogger, UnityDemo002" />
    11 <typeAlias alias="TextFileLogger" type="UnityDemo002.TextFileLogger, UnityDemo002" />
    12 <typeAlias alias="IFileLogger" type="UnityDemo002.ILogger, UnityDemo002" />
    13 </typeAliases>
    14 <!--注入インスタンス配置-->
    15 <containers>
    16 <container>
    17 <types>
    18 <type type="IFileLogger" mapTo="TextFileLogger" name="DBL"/>
    19 <type type="IFileLogger" mapTo="DatabaseLogger" name="TextFL"/>
    20 </types>
    21 </container>
    22 </containers>
    23 </unity>
    24 </configuration>

    4 依存性注入します!

      

     1          //DI コンテナを生成  
    2 IUnityContainer container = new UnityContainer();
    3
    4 //コンテナを配置する
    5 UnityConfigurationSection config = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
    6 config.Configure(container);
    7
    8 //依存性を注入する
    9 ILogger databaseLogger = container.Resolve<ILogger>("TextFL");
    10 databaseLogger.Write("hello Unity!");
    11 Console.ReadKey();

    5 このコードを実行すると

     

    と出力されます。

    最後に

    今回はコードで依存性を注入しました。構造関数を使った方法では、クラスを切り替えるにはコードを修正してリビルドする必要があるので、使う場面は少ないでしょう。

    次は属性を使って依存性を注入する予定。

    作成日時 2012-03-09 19:24:21

  • 相关阅读:
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    VGA显示器如何连接HDMI接口主机
    h5ai搭建自己的文件分享程序
    阿里钉钉智能硬件产品上线企业0元购买
    chevereto搭建自己的图床站点
    简单配置webpack自动刷新浏览器
    简易nodejs爬虫抓取博客园指定用户的文章及浏览量
    使用es6的set和map实现数组去重复
    promise实例小球运动
    ImportError: Couldn't import Django.
  • 原文地址:https://www.cnblogs.com/zhaidh/p/2388212.html
Copyright © 2011-2022 走看看