Autofac IOCが最大の特徴は、直接登録するにはC#のコードを使用して設定ファイルを行うことができる必要があり、フレームワークです。
AutofacもAsp.net MVCの拡張のために用意されています。
ここでAutofac文書であるMVCプロジェクトを使用して統合する方法について説明します。
保護された空のApplication_Start() { VARビルダー=新しいContainerBuilder(); builder.RegisterControllers(typeof演算(MvcApplication).Assembly)。 VARコンテナ= builder.Build()。 DependencyResolver.SetResolver(新しいAutofacDependencyResolver(コンテナ)); //他のMVCのセットアップ...
内部のプロセスを説明します。
1.まず、(後に我々は我々が必要とするオブジェクトのインスタンスを削除することができ、私たちのために容器を提供します)ContainerBuilderを作成
現在のアセンブリビルダー、ビルダー2.登録のすべてのコントローラの現在のコントローラMVCプロジェクトのすべてのタイプを取得しますので、
コンテナを作成します3。
AutofacDependencyResolverでデフォルトMVC DependencyResolverを交換してください。4.
[OK]をクリックします。ここでは、まだ簡単に理解するために目の前で、最後DependencyResolver DependencyResolverを理解するために、あなたがControllerFactoryを知るために必要なもの?やります
ControllerFactoryでMVC
MVC処理要求は、URL要求がマッチングルートを見つけることで、ルートコントローラに対応する名前を解析され、 そして、名前によって、要求に応じて、対応するタイプのコントローラ、およびコントローラ・オブジェクト・インスタンスを見つけること。
上記の太字、そのメソッドCreateController方法であること、DefaultControllerFactoryが行う次のとおりです。
パブリック仮想IController CreateController(RequestContextのRequestContextの、文字列のコントローラ名)
CreateController方法とは、主にGetControllerTypeとGetControllerInstance方法に依存しています:
保護された内部仮想タイプGetControllerType(RequestContextのRequestContextの、文字列controllernameの) 保護された内部仮想IController GetControllerInstance(RequestContextのRequestContextの、タイプcontrollerType)
参照してください非常に多くの仮想メソッドは、これは、我々が継承され、オーバーライド事は明らかではないのですか?非常にエキサイティングではありません。私たちはここにGetControllerInstanceメソッドをオーバーライドして、ここでcontrollerTypeに応じIoCコンテナからこのControllerTypeのインスタンスを取得した場合、すべてがOKは何をするではないでしょうか?
はい、継承とGetControllerInstanceメソッドを書き換えるには、確かにIocのコントローラーを達成することができ、その後のApplication_Start()内部には、このコード行を使用し、DefaultControllerFactoryを交換してください。
ControllerBuilder.Current.SetControllerFactory(新しいMyControllerFactory(_container));
それは良いことDependencyResolver?
GetControllerInstanceでファクトDefaultControllerFactoryにおいて、のgetServiceインスタンスを取得方法IDependencyResolverインタフェース定義を呼び出します。このインタフェースを継承することで、元のMVC小さいへの変更を元DependencyResolverを交換してください。だから私たちが見る開けるの継承IDependencyResolverインタフェースにより、より有効に活用します:
DependencyResolver.SetResolver(新しいAutofacDependencyResolver(コンテナ));
IDependencyResolver借口
パブリックインターフェースIDependencyResolver { オブジェクトのgetService(タイプのServiceType)。 IEnumerableGetServices(タイプのServiceType)。 }
AutofacDependencyResolverは例のソースコードを見てみたいどのようにコンテナ缶から取得したタイプこちら
思考と実践:ときに使用ControllerFactory
使用Asp.net MVCの面積は、我々はより精通している必要があります。大規模なプロジェクト、状況の人々の発展を解決するために使用されます。達成するための原理面積が、でも同じ名前コントローラの名前空間で区別することです。しかし、どのような場合には、面積がプロジェクトの内部です。
どのように別のプロジェクトにエリアを分けることができますか?ここでのGetControllerType方法は良い出発点です。次は面積が異なるプロジェクト、大規模プロジェクトの利便性に分ける方法を探ります。また、これは達成するために、原則オーチャードCMSモジュールです。