Autoface を使用して新しい MVC4 サイトを作成しています。このサイトには、一般消費者向けサイトと、消費者向けサイトを管理するための管理領域があります。管理サイトは、消費者向けサイトと同じサービスを使用して別の場所に配置されますが、カスタム ブランド機能の一部はありません。
ビューが使用する共有データのセットを提供する ViewDataFactory を使用するという他の場所でのアドバイスに従いました。私の目標は、あなたがいるエリアに応じて異なる ViewDataFactory を提供することです。
たとえば、IViewDataFactory を実装するサービスは次のとおりです。
builder.RegisterType<SelfServiceViewDataFactory>().As<IViewDataFactory>();
これにより、すべてのコントローラーに挿入される 1 つの ViewFactory が得られます。ただし、私が達成しようとしているのは、次のようなものです(機能コードではありません):
builder.RegisterType<ViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase1);
builder.RegisterType<DifferentViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase2);
コントローラーのタイプまたは MVC 領域によって、解決されるサービスが決定される場所。
編集
私の投稿を明確にするために、2 つの質問があります。
- Autofac で「タイプ X のクラスに対してのみ、タイプ Y のサービスがインスタンス Z によって提供される」と言う方法はありますか?
- コンポーネントが使用されているエリアに基づいて Autofac の動作を変更する方法はありますか?
私が読んできたすべてのことから、どのコンポーネントを提供するかを確認するために使用するパラメーターがない限り、#1への答えは「いいえ」のようです。Ninject は名前空間に基づいて依存関係を提供できることを知っているので、他のフレームワークがこのケースを処理しているようです。解決策は、パラメーターを指定するか、2 つの異なるサービスを定義することです。
Autofac と MVC の分野についてはあまり議論されていないので、#2 もカスタム ソリューションなしでは不可能だと思います。ありがとう!