autofac チュートリアル
オートファックの使い方
サーチ…
備考
Autofacは、Microsoft .NET 4.5、Silverlight 5、Windows Storeアプリケーション、Windows Phone 8アプリケーション用のIoCコンテナです。クラス間の依存関係を管理するので、サイズや複雑さが増すにつれてアプリケーションを簡単に変更できます。これは、通常の.NETクラスをコンポーネントとして扱うことで実現します。
ウィキペディアから:
ソフトウェア工学では、制御の反転(IoC)は、コンピュータプログラムのカスタム記述部分が汎用フレームワークからの制御の流れを受け取る設計原則である。この設計のソフトウェアアーキテクチャは、従来の手続き型プログラミングと比べて制御を逆転させます。伝統的なプログラミングでは、プログラムの目的を表現するカスタムコードは汎用タスクを処理するために再利用可能なライブラリを呼び出しますが、カスタムまたはタスク固有のコードを呼び出します。
Autofacのインストール
プロジェクトでAutofacを使用するには、NuGet Package ManagerからAutofacをインストールするだけです。 Autofacを使用するソリューションを開き、[ Manager NuGet Packages for Solution...選択します。
Tools -> NuGet Package Manager -> Manager NuGet Packages for Solution...
[ NuGet-Solution ]タブで、検索ボックスに「Autofac」と入力します。あなたが「ブラウズ」セクションにいることを確認してください。下の画像に示すように、最初のオプションをインストールします(イメージのマークされた領域に注意してください)。
NuGetをインストールすると、インストール中に選択されたプロジェクトの参照にAutofacが自動的に追加されます。
公式の文書を見てください。
オートファクトの設定
この例は、を使い始める方法を紹介しますコントロールのInverion密接以下、比較的単純なプロジェクトでAutofacを使用して公式始めるドキュメントを。
File -> New -> Project -> Console Applicationコンソールアプリケーションからコンソールアプリケーションを作成するこのプロジェクト用にAutofacをインストールします。 ここをクリックしてくださいAutofacのインストール
次の名前で、2つのインターフェースと2つのクラスを追加します。
Interfaces | Classes -------------------------- IOutput | ConsoleOutput (implementing IOutput) IDateWriter | TodayWriter (implementing IDateWriter)
簡単にするために、usingステートメントと名前空間は表示されません。
IOuput.cs
public interface IOutput
{
void Write(string content);
}
ConsoleOutput.cs
public class ConsoleOutput : IOutput
{
public void Write(string content)
{
Console.WriteLine(content);
}
}
IDateWriter.cs
public interface IDateWriter
{
void WriteDate();
}
TodayWriter.cs
public class TodayWriter : IDateWriter
{
private IOutput _output;
public TodayWriter(IOutput output)
{
_output = output;
}
public void WriteDate()
{
_output.Write(DateTime.Today.ToShortDateString());
}
}
これまでのところ、コードは簡単でシンプルです。自動依存性注入が行われる部分に行くことができます。もちろん、これはオートファックによって行われています!
Program.csファイルのProgramクラスをこのコードに置き換えます( Programクラスはプロジェクト作成時にVisual Studioによって自動的に作成されますが、存在しない場合は作成して作成してください)。
class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
builder.RegisterType<TodayWriter>().As<IDateWriter>();
Container = builder.Build();
WriteDate();
}
public static void WriteDate()
{
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
}
実行すると、出力はコンソールの現在の日付になります。プロジェクトでAutofacを使用して自動的に依存関係を注入しました。
ここでは何が起こっているのですか?
アプリケーションの起動時に、
ContainerBuilderを作成し、それにコンポーネントを登録します。コンポーネントは、インターフェイスを実装する.NETタイプであり、いくつかのサービスを公開します 。 サービスとコンポーネントを読みます 。次に、コンポーネント(クラス)に公開するサービス(インタフェース)をコンポーネントに登録します。登録されると、Autofacはインターフェイスを解決するときに作成するクラスのインスタンスを認識します。
最後に、プログラムを実行すると:
-
WriteDate()メソッド(Main())はAutofacにIDateWriterをIDateWriterます。 - Autofacはことを認識
IDateWriterマップがするTodayWriterので、作成を開始しTodayWriter。 - Autofacは、
IOutputがそのコンストラクタでTodayWriter必要とすることをIOutputします。 - Autofacは、
IOutputがConsoleOutputマップすることを確認して、新しいConsoleOutputインスタンスを作成します。 - Autofacは新しい
ConsoleOutputインスタンスを使用してTodayWriter構築を完了しConsoleOutput。 - Autofacは、完全に構築
TodayWriterれたWriteDate()TodayWriterを返します。
-
