今回は、指定フォルダ配下にある、指定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);
}
}
}
今回、以下のサイトを参考にしました。