9

私のAsp.Net MVC 4 WebApiアプリケーションでは、別のアセンブリにある追加のWebApiControllersを後で(WebApiの初期化後)動的にロードしたいと考えています。さらに、実行時にこれらのコントローラーのルートを追加したいと考えています。

これが可能かどうか疑問に思っています。

私の目標は、コントローラー (コンパイルされたアセンブリ) をアップロードできる Web アプリを構築することであり、コントローラーはこのアプリケーション内で自動的にホストされます。

私はすでに独自の AssemblyResolver クラスを実装することでそれを達成しようとしましたが、(私が見た限りでは) AssemblyResolver は初期化段階で一度ロードされます。

すべてのコントローラーを「再ロード」するオプションがあるかもしれません。

どんな助けでも大歓迎です!

マリウス

4

5 に答える 5

2

Web API 依存関係リゾルバーを使用できます。

public class WebApiApplication : System.Web.HttpApplication
{
    void ConfigureApi(HttpConfiguration config)
    {
        config.DependencyResolver = new MyDependencyResolver();
    }

    protected void Application_Start()
    {
        ConfigureApi(GlobalConfiguration.Configuration);

        // ...
    }
}

Web API 依存関係リゾルバーの使用

于 2012-11-27T08:59:03.147 に答える
2

回答ありがとうございます。

すべてのコントローラーが一度ロードされ、常にキャッシュされるため、それは不可能です。

DefaultHttpControllerSelectorメソッド InitializeControllerInfoCache(...)の HttpControllerTypeCache を参照してください。

型キャッシュの更新を行うには、カスタム HttpControllerSelector を実装する必要があります。

于 2012-11-27T13:50:38.153 に答える
2

MEFは行く方法です。デフォルトのコントローラ ファクトリを置き換えるには、独自のコントローラ ファクトリを作成する必要があります。このリンクを見てください http://www.fidelitydesign.net/?p=104

編集: リンク切れ、Wayback を参照 https://web.archive.org/web/20130619191423/http://www.fidelitydesign.net/?p=104

于 2012-11-27T19:32:02.750 に答える
0

Global.asaxですべてのアセンブリを特定のフォルダーにロードしてから、特定のインターフェイスを実装するクラスを探した場合はどうでしょうか。

void RegisterControllers(RouteCollectionルート);

インスタンスを作成してから、ルートコレクションを渡します。これにより、Webサイトの起動時に追加のルートが登録されます。

于 2012-11-27T14:11:15.107 に答える
0

出発点として、このhttp://haacked.com/archive/2010/01/17/editable-routes.aspxを参照する必要があると思います 。

于 2012-11-27T08:51:31.327 に答える