2

StructureMap を使用してこのチュートリアルに従おうとしています: http://iridescence.no/post/Constructor-Injection-for-ASPNET-MVC-Action-Filters.aspx

私が理解しようとしているのは、この行に相当する StructureMap です。

var container = (ICanResolveDependencies) HttpContext.Current.ApplicationInstance;

コンテナを元に戻したいので、依存関係を手動で解決できます。

これは、global.asaxで依存関係リゾルバーを設定する方法です

            GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
            new StructureMapDependencyResolver(container));
4

1 に答える 1

3

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 プロジェクトではおそらく最良のアイデアではありません。

于 2012-06-22T21:51:50.290 に答える