MVC3 プロジェクトでカスタム RoleProvider を作成しようとしています。私の RoleProvider は次のように定義されています。
public class MyRoleProvider : System.Web.Security.RoleProvider
{
private IAccountService _accountService;
public MyRoleProvider()
{
_accountService = DependencyResolver.Current.GetService<IAccountService>();
}
//...
}
ご覧のとおり、バインドされたサービスを取得するために DependencyResolver を使用しようとしています。私のバインドは、私の App_Start で行われます。
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
// Add data and infrastructure modules
var modules = new List<INinjectModule>
{
new ConfigModule(),
new LoggingModule(),
new RepositoryModule(),
new ServiceModule()
};
kernel.Load(modules);
}
ServiceModule は、実際のバインディングを行っている場所です。
public class ServiceModule : NinjectModule
{
public override void Load()
{
Kernel.Bind<ICoreService>().To<CoreService>();
Kernel.Bind<IAccountService>().To<AccountService>();
}
}
私の問題は、Web サイトをデバッグするときに、構成エラーが発生することです。
構成エラー
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下の特定のエラーの詳細を確認し、構成ファイルを適切に変更してください。
パーサー エラー メッセージ: 呼び出しのターゲットによって例外がスローされました。
ソース エラー:
Line 45: <roleManager>
Line 46: <providers>
Line 47: <clear />
Line 48: <add name="MyRoleProvider" type="Project.Web.Ui.Helpers.MyRoleProvider, Project.Web.Ui" connectionStringName="MyConnection" />
Line 49: </providers>
Line 50: </roleManager>
ロール プロバイダー コンストラクターにブレークポイントを配置すると、次のようになります。
_accountService = DependencyResolver.Current.GetService();
App_Start Dependency Injector にブレークポイントを配置します。
var カーネル = 新しい StandardKernel();
_accountService ブレークポイントが最初にヒットしますが、ステップ オーバーまたはステップ インしようとすると、爆発します。私が間違っているかもしれないことについての考えや、より深く掘り下げる方法を考え出すためのアイデアはありますか?
編集: Dependency Injector が私のサービスをインターフェイスにバインドしておらず、DependencyResolver がバインドについて認識していないことが原因であると想定しています。