我試圖在MVC3應用程序中使用自定義角色提供程序。我已經有了使用Ninject的會員供應商,但似乎無法讓角色提供商工作。成員資格提供程序不需要無參數構造函數,但角色提供程序需要。下面是一些代碼片段:在MVC3應用程序中使用Ninject與自定義角色提供程序
的Web.config
<membership>
<providers>
<clear/>
<add name="MyMembershipProvider" type="MyApp.Models.NHibernateMembershipProvider"
applicationName="myApp" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<add name="MyRolesProvider" type="MyApp.Models.NHibernateRoleProvider"
applicationName="myApp" />
</providers>
</roleManager>
我有一個Ninject模塊。
public class MyNinjectModule : NinjectModule
{
public override void Load()
{
this.Bind<ISession>().ToMethod(
x => MyApp.MvcApplication.SessionFactoryData.GetCurrentSession());
// Respository
this.Bind<IUserRepository>().To<UserRepository>();
this.Bind<MembershipProvider>().To<NHibernateMembershipProvider>();
this.Bind<RoleProvider>().To<NHibernateRoleProvider>();
}
}
自定義成員資格提供
public class NHibernateMembershipProvider : MembershipProvider
{
private IUserRepository _repo;
public NHibernateMembershipProvider(IUserRepository repository)
{
_repo = repository;
}
...
角色提供
public class NHibernateRoleProvider : RoleProvider
{
private IUserRepository _repo;
public NHibernateRoleProvider(IUserRepository repository)
{
_repo = repository;
}
...
我再配置我的控制器需要授權
[Authorize(Roles="Admin")]
public ActionResult Edit(int? id)
{
...
我得到這個錯誤挑動時g應用程序。
Parser Error Message: No parameterless constructor defined for this object.
Source Error:
Line 49: <roleManager enabled="true">
Line 50: <providers>
Line 51: <add name="MyRolesProvider" type="MyApp.Models.NHibernateRoleProvider"
Line 52: applicationName="myApp" />
Line 53: </providers>
我可以通過會員提供商訪問用戶,這樣倉庫被注入確定,但角色提供商似乎是不同的。爲什麼角色提供者需要一個無構造函數的參數?是否有一種簡單的方法讓角色提供者與Ninject一起工作。任何幫助讚賞。
我現在有角色提供大部分時間都在工作,但如果我嘗試驗證用戶,則加載的角色提供者沒有對存儲庫的引用(它爲空)。不知道爲什麼會這樣。 – Matt
存儲庫爲空的原因是Ninject未創建角色提供程序。它是由ASP.NET框架創建的,而該框架又不是非常友好的。這就是爲什麼它需要一個無參數的構造函數。 – mrydengren