2012-08-09 10 views
7

以前のDefaultControllerFactoryを新しいASP.NET Web APIに置き換えて、REST/XML呼び出しをよりうまく処理しようとしています。ウェブを検索すると、System.Web.Http.Dependencies.IDependencyResolverを実装してから、GetService()を処理し、インターフェイスで必要なその他の方法はほとんどありませんでした。Web APIのDefaultControllerFactoryに相当するものは何ですか?

しかし、それはApiControllerインスタンスと新しいコントローラをキャッシュしているようですが、解決していないようです。パフォーマンス上の問題により、起動時にすべての可能なApiControllerインスタンスを提供することが困難です。

DefaultControllerFactoryコントローラインスタンスの提供とキャッシュの「ヒット」エントリを許可しますが、インスタンスを遅延ロードできない場合はエラーをスローします。

実装する必要がある他のオーバーロード/コントローラファクトリメソッドがありますか?

検索でこれまでのヒットは見つかりませんでしたが、どのポインタも優れています。あなたの時間をありがとう。

+0

DefaultControllerFactoryはもうベータ版から、ではないRCであり、あなたがより良いハンドルREST/XMLコールに」もっと手の込んだことができてくださいあなたはデフォルトを使用し –

+0

を処理するために何をしたいです?コントローラには、必要に応じて動的にロードされるコントローラがあります。このコントローラには、異なるAPI(接尾辞がjsonまたはxml)を使用してxml/json形式の両方を処理するメソッドがあります。メディアフォーマットの世話をするために、私たちはそれらをこのモデルに移したいと思いますが、コントローラを動的にロードすることは問題になるようです。 – sraj

+1

json/xsml suffi xes、なぜUriPathExtensionMappingを活用しないのですか? –

答えて

7

DefaultHttpControllerActivatorによって実装されるIHttpControllerActivatorです。

あなたは使用してそれを置き換えることがあります。

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), 
     new MyOwnActivatior()); 

おっと!

私はIHttpControllerSelectorを意味しました!


それはDefaultHttpControllerSelectorによって実装IHttpControllerSelectorです。

あなたが使用してそれを置き換えることがあります。

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), 
     new MyOwnActivatior()); 
+1

ありがとうございます。これは、コントローラがアセンブリに存在する場合に機能します。しかし、要求に応じてコントローラを動的にロードする必要があります。この場合、コールはコントローラアクティベータに入力されません。例えば。名前が "CustomAPIController"の型がアセンブリに存在する場合、http:// localhost:9999/api/customapi/get/1が機能します。ただし、http:// localhost:9999/api/customapidynamic1/get/1は、コントローラアクティベータのCreate()メソッドを呼び出すようには見えません。意図した使用は、コントローラの要求に応じて負荷を見つけることです。 – sraj

+3

次に、IHttpControllerSelector(コントローラーを選択)、IHttpControllerTypeResolver(コントローラータイプのリストをIHttpControllerSelectorに提供)、IAssembliesResolver(アセンブリのリストを提供)のいずれか1つ以上を置き換える必要があります。 http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection –

+0

MikeWassonありがとうございます。これらのインターフェイスの多くを試してみましょう。これは難しいことではなかったと願っています。 – sraj

関連する問題