ライト級IOCフレーム:Ninject(上)

5540 ワード

前言
この間Mvcのベストプラクティスを見た時、軽量級のIOCフレームワーク:Ninjectと知り合った。googleで検索したら、オープンソースの項目です。最新ソースの住所はhttp://github.com/enkari/ninject/tree/masterです。
ユーザガイド:http://ninject.codeplex.com/wikipage?title=User%20Guide&referringTitle=Home
新米を勧めます。まずNinjectの紹介を見てください。
  • What Is Ninject
  • Why Use Ninject
  • その中のNinjectのメリットについて抜粋して翻訳します。
    Ninjectは電光のように速く、超軽量級の基礎である.Netプラットフォームの依存注入フレームである。アプリケーションを個々の松の結合、高凝集のモジュールに分離して、柔軟な方法で組み立てることができます。Ninjectを使ってあなたのソフトウェアアーキテクチャを組み合わせることによって、コードはより簡単に編纂して、重用性は強くて、テストと修正しやすいです。
    ブログ検索園ではまだNinjectの使用について見つけられていませんので、ここでは入門レベルの教程としての例を発表します。
     
    Ninject入門レベルの例
    以前のIOC教程のように、ログを例にとるのはとても直感的です。
    まずログ記録のインターフェースを作成します。
    public interface ILogger
    {
        void Write(string message);
    }
     
    及びFlatFileLogger、DatabaseLoger ロギングの論理を実現するために(Ninjectの使用を実証するためだけに、具体的なロジックは省略されています。コンソールでそのロギングを使用したことをお知らせしました):
    public class FlatFileLogger : ILogger
    {
        public void Write(string message)
        {
            Console.WriteLine(String.Format("Message:{0}", message));
            Console.WriteLine("Target:FlatFile");
        }
    }
    
    public class DatabaseLogger : ILogger
    {
        public void Write(string message)
        {
            Console.WriteLine(String.Format("Message:{0}", message));
            Console.WriteLine("Target:Database");
        }
    }
     
    NinjectはNinject Moduleを通じて(ファイルの配置があるかどうかは分かりませんが、公式の教程では関連資料が見つかりません)、ここで自分のModuleをカスタマイズします。
    internal class MyModule : Ninject.Modules.NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<FlatFileLogger>();
            Bind<ILogger>().To<DatabaseLogger>();
        }
    }
     
    具体的な呼び出し方法:
    private static IKernel kernel = new StandardKernel(new MyModule());
    static void Main(string[] args)
    {
        ILogger logger = kernel.Get<ILogger>();
        logger.Write("Bruce Say: Hello Ninject!");
        Console.WriteLine("continues..");
        Console.Read();
    }
     
    Iloggerの例は、kenel.Get<Ilogger>()によって取得されます。以前はMyModuleでILoggarに対して先着していました。 FlatFileLoggerをバインドしました。 和 DatabaseLoggerは、ケネル・Get<ILogger>()ここで最初のバインディングの対象となるFlat FileLoggerを返します。
     
    構造関数注入
    ここにITesterとIocTesterを新設しますが、IocTesterはILoggarに依存しています。
    interface ITester
    {
        void Test();
    }
    
    class IocTester:ITester 
    {
        private ILogger _logger;
        public IocTester(ILogger logger)
        {
            _logger = logger;
        }
    
        public void Test()
        {
            _logger.Write("Bruce Say: Hello Ninject!");
        }
    }
     
    Ninjectはどのように構成されているかを見てみます。簡単にMyModuleを修正します。ITester:Bind<ITester>()を結びつけます。To<IocTester>():
    internal class MyModule : Ninject.Modules.NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<FlatFileLogger>();
            Bind<ITester>().To<IocTester>();
        }
    }
     
    以上の配置からは、IocTesterは見えません。 シロガーと 依存関係があります。これは注入に依存する利点です。どのインターフェースがどのタイプに対応するかを簡単に教えます。残りのタスクはNinjectに任せて処理します。
    private static IKernel kernel = new StandardKernel(new MyModule());
    static void Main(string[] args)
    {
        ITester tester = kernel.Get<ITester>();
        tester.Test();
        Console.WriteLine("continues..");
        Console.Read();
    }
     
    また、Ninjectは属性や方法などの注入もサポートしており、具体的にはユーザーガイドを参照することができます。
     
    IOCの世界では、Don't call me、I will call youという言葉があります。
    住所:http://www.cnblogs.com/coolcode/archive/2009/11/10/Ninject.html