この記事の説明によると、custom-membership-provider-with-repository-injection
injectで提供するカスタムメンバーシップを実装します。
カスタムメンバーシッププロバイダー
using Ninject;
public class CustomMembershipProvider : MembershipProvider
{
[Inject]
public IUserRepository UserRepository { get; set; }
[...]
カスタムロールプロバイダー
using Ninject;
public class CustomRoleProvider : RoleProvider
{
[Inject]
public IUserRoleRepository UserRoleRepository { get; set; }
[...]
Web.Config内
<membership defaultProvider="CustomsMembershipProvider">
<providers>
<clear/>
<add name="CustomsMembershipProvider" type="namespace.CustomsMembershipProvider"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="customRoleProvider">
<providers>
<clear/>
<add name="customRoleProvider" type="namespace.customRoleProvider"/>
</providers>
</roleManager>
NinjectWebCommon内になりました
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)
{
[...]
kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IUserRoleRepository>().To<UserRoleRepository>();
// Inject user & role repository into our custom membership & role providers.
kernel.Inject(Membership.Provider);
kernel.Inject(Roles.Provider);
}
アプリケーションを実行するとエラーが発生しました
このメソッドは、アプリケーションの開始前の初期化段階では呼び出すことができません。
kernel.Inject(Membership.Provider);
この行から
しかし、カーネル設定をApplication_Start内に配置した場合
次のエラーが発生しました
IUserRepositoryのアクティブ化中にエラーが発生しました一致するバインディングが利用できず、タイプは自己バインドできません。アクティベーションパス:2)CustomMembershipProviderタイプのプロパティUserRepositoryへの依存性IUserRepositoryの注入1)CustomeMembershipProviderのリクエスト
それを解決する方法。??