ライト級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教程のように、ログを例にとるのはとても直感的です。
まずログ記録のインターフェースを作成します。
及びFlatFileLogger、DatabaseLoger ロギングの論理を実現するために(Ninjectの使用を実証するためだけに、具体的なロジックは省略されています。コンソールでそのロギングを使用したことをお知らせしました):
NinjectはNinject Moduleを通じて(ファイルの配置があるかどうかは分かりませんが、公式の教程では関連資料が見つかりません)、ここで自分のModuleをカスタマイズします。
具体的な呼び出し方法:
Iloggerの例は、kenel.Get<Ilogger>()によって取得されます。以前はMyModuleでILoggarに対して先着していました。 FlatFileLoggerをバインドしました。 和 DatabaseLoggerは、ケネル・Get<ILogger>()ここで最初のバインディングの対象となるFlat FileLoggerを返します。
構造関数注入
ここにITesterとIocTesterを新設しますが、IocTesterはILoggarに依存しています。
Ninjectはどのように構成されているかを見てみます。簡単にMyModuleを修正します。ITester:Bind<ITester>()を結びつけます。To<IocTester>():
以上の配置からは、IocTesterは見えません。 シロガーと 依存関係があります。これは注入に依存する利点です。どのインターフェースがどのタイプに対応するかを簡単に教えます。残りのタスクはNinjectに任せて処理します。
また、Ninjectは属性や方法などの注入もサポートしており、具体的にはユーザーガイドを参照することができます。
IOCの世界では、Don't call me、I will call youという言葉があります。
住所:http://www.cnblogs.com/coolcode/archive/2009/11/10/Ninject.html
この間Mvcのベストプラクティスを見た時、軽量級のIOCフレームワーク:Ninjectと知り合った。googleで検索したら、オープンソースの項目です。最新ソースの住所はhttp://github.com/enkari/ninject/tree/masterです。
ユーザガイド:http://ninject.codeplex.com/wikipage?title=User%20Guide&referringTitle=Home
新米を勧めます。まず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