33

ASP.NET MVC で MEF (Managed Extensible Framework (Microsoft の新しいプラグイン フレームワーク)) を使用した経験やアイデアがあるかどうかを調べようとしています。私が持っている標準の ASP.NET MVC を作成する必要があります。プラグインを追加するかどうかに応じて、ビューやコントローラーなどの追加機能を提供します. 動的にコンパイルする必要はありません. つまり、ソースコード..

アプリの起動時に DLL を動的にロードし、ビューとコントローラーをメイン システムとマージする方法はありますか? ここで正しい軌道に乗っているかどうかはわかりません。

次に、アプリに付属の「STANDARD」ビューで、「IF THEN」を使用して、プラグインがロードされているかどうかを確認し、ユーザー コントロールで MERGE できると思います。

ええと、私はここで大声で話していますが、あなたは私が何を言いたいのか理解していると思います.

何か案は?

4

6 に答える 6

23

それで運がいいですか?私はこれを読んでいて、それがあなたが探しているものだと思います.
MEF の経験値は正確にゼロですが、有望に見えます。それを実験するために、家で一緒に数時間の自由時間をかき集められることを願っています. そのようにして、ある種のモジュール化された MVC「フレームワーク」を作成することは非常に便利です。

私が取り組んでいる現在のプロジェクトに関しては、次の問題があります。同じビューを持つ複数のサイトで、他の CSS ファイルのみです。現在、ビューを複製する必要があり、メンテナンスの問題が発生しています。
MEF を使用して、これらのビューを中央の場所に配置できることを願っています。

于 2009-04-22T09:55:10.333 に答える
4

これをチェックして :

http://www.fidelitydesign.net/?p=104

Managed Extensibility Framework (MEF) を使用したモジュラー ASP.NET MVC、第 1 部、Matthew Abbott 著。

于 2010-06-01T14:42:36.800 に答える
4

ASP.NET MVC では大量の MEF を使用していますが、そのほとんどはコントローラー レベルより下のレベルにあります。これは、下位レベルのモジュールでアクセス許可のチェックとデータの検証に MEF プラグインを使用しているためです。

ただし、コントローラーに対しても、より構成可能なアプローチを使用します。ビューはもっとトリッキーですが、実際には、通常の ASP.NET MVC ビューの使用を完全に排除し、Razor ビューをデータベースのスニペットに保存しました。次に、コントローラーは実行時にテンプレート エンジンにビューを要求し、View("Viewname") などを返す代わりに ContentResult を応答にレンダリングします。

私たちの MEF プラグインはすべて、実行時にカスケード オーバーライドを実行して、特定の目的に使用する必要があるプラグイン/クラスを特定できる識別子プロパティを持っています。実証する最も簡単な例は、共通のベースを持つが、それぞれがコア機能をオーバーライドするオプションを持つ 50 以上の実装にデプロイされているアプリについて考える場合です。

したがって、「ログイン」、「ログアウト」などのメソッドを含む IUserController のようなものがあるかもしれません。

その実際の機能に加えて、"SiteId" と呼ばれるインターフェイスに読み取り専用の GUID プロパティを追加します。次に、各実装は、対象となる SiteId をハードコーディングします。コア コードの "既定" の実装では、"Guid.Empty" が返されます。

次に、MEF を呼び出して、使用する IUserController の実装を探しに行くときは、それらすべての ImportMany を List に実行し、LINQ を使用してプロパティをクエリして、使用するものを特定します。

var _currentUserController = _availableUserControllers.FirstOrDefault(
  c=>c.SiteId == AppSettings.SiteId);
if(_currentUserController == null){
    //There is no site-specific override
    _currentUserController = _availableUserControllers.FirstOrDefault(
      c=>c.SiteId == Guid.Empty);
}

コントローラーでこれを行うには、Web 上にある MEF ベースのコントローラー ファクトリの実装をいくつか調べるのが最善の策です。

しかし、私が言ったように、私たちはこれのほとんどすべてをより低いレベルで行い、モジュールまたはコントローラーにこの種のルックアップを実行させて、どのプラグインを実行するかを決定させます。

于 2011-09-10T20:35:01.393 に答える
1

http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspxhttps://blogs.msdn.com/hammettがあります。 /archive/2009/04/23/mef-and-asp-net-mvc-sample.aspxでは、アプリケーションで MEF と MVC を使用する方法について説明しています。

于 2009-04-25T09:23:30.340 に答える
0

MVC と MEF を使用して、強く型付けされたビューを持つプラグ可能なフレームワークをまとめました。 -強く型付けされたビュー/

于 2010-06-01T21:17:51.363 に答える