今回は、指定フォルダ配下にある、指定I/Fを実装したアセンブリを、動的に読み込んでインスタンスを生成する実装を行います。
目次
- ソリューション構成
- 取り決めごとにする インターフェース の作成
- プラグイン実態(dllファイル) の 実装
- プラグイン を読み込んで インスタンス の生成
サンプルコード
今回は、指定フォルダ配下にある、指定I/Fを実装したアセンブリを、動的に読み込んでインスタンスを生成する実装を行います。
目次
サンプルコード
フォーム認証でも、Windows認証でもなく、完全に独自の認証方法を行う場合、どのような実装を行うかのサンプルを掲載します。 シングルサインオン を実装するような ケース を想定した実装例です。 実装が web.config や Global.asax なので、ASP.NET MVC、WCF等で有効な実装方法になるハズです(試したのは ASP.NET MVC4 のみ)。
目次
ソースコード
ASP.NET MVC において、/Home/Index
へアクセスした場合、発生するイベントの順序を調べてまとめました。
IIS へ アクセス した タイミング によって発生する イベント が異なるので、それぞれ分かるよう プルダウン を準備しました。
調査対象は HttpApplication (Global.asax)
、 IHttpModule
、 IAuthorizeFilter
、 IActionFilter
、 Controller
、 View (*.cshtml)
です。
デバッグをするとき、ちょっと必要になったのでメモ。
ファイル名 , クラス名 , メソッド名 の 取得 サンプル
namespace MvcApplication.Filters { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Web; using System.Web.Mvc; public class AuthorizeFilterAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { // アセンブリファイル名 の 取得 var fileName = Path.GetFileName(this.GetType().Assembly.Location); // クラス名 の 取得 var className = this.GetType().FullName; // メソッド名 の 取得 var methodName = MethodBase.GetCurrentMethod().Name; // デバッグ出力 System.Diagnostics.Debug.WriteLine("{0,30} {1,30} : {2}", fileName, className, methodName); } } }
今回、以下のサイトを参考にしました。