IContainer
アクションフィルターのコンストラクターで依存関係を要求するだけです。によって自動的に登録されない場合はStructureMap
、次の方法で登録できます。
For<IContainer>().Use<Container>();
編集
オプション 1:次のようなものを使用できませんでした:
GlobalConfiguration.Configuration.ServiceResolver.GetService(...)
// or (not sure what would be the right syntax)
GlobalConfiguration.Configuration.ServiceResolver.Current.GetService(...)
設定したら、現在のサービスリゾルバーを取得する何らかの方法が必要です。
オプション 2:通常の MVC を使用すると、次のように現在のリゾルバーを取得できます。
DependencyResolver.Current
そして、次のように使用します。
DependencyResolver.Current.GetService()
WebAPI は DependencyResolver を使用していないように見えますが、このブログ投稿によると、次のように設定できます。
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
// this override is needed because WebAPI is not using DependencyResolver to build controllers
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
DependencyResolver.Current.GetService,
DependencyResolver.Current.GetServices);
DependencyResolver.Current
次に、アクション フィルターから使用してみます。
オプション 3:直接使用ObjectFactory.GetInstance
- IDependencyResolver インスタンスに既にカプセル化されている必要があるため、MVC プロジェクトではおそらく最良のアイデアではありません。