带有Sqlite设置的Ninject MVC3 ASP.NET CustomMembershipService
我在配置自定义文件时遇到问题 绑定模块时,我在应用程序启动时收到一条恼人的消息,如下所示:带有Sqlite设置的Ninject MVC3 ASP.NET CustomMembershipService,sqlite,asp.net-mvc-3,asp.net-membership,ninject,membership-provider,Sqlite,Asp.net Mvc 3,Asp.net Membership,Ninject,Membership Provider,我在配置自定义文件时遇到问题 绑定模块时,我在应用程序启动时收到一条恼人的消息,如下所示: this.Bind<RoleProvider>() .ToConstant(Roles.Providers["SQLiteRoleProvider"]); this.Bind<MembershipProvider>() .ToConstant(Membership.Providers["SQLiteMembershipProvider"]); This metho
this.Bind<RoleProvider>()
.ToConstant(Roles.Providers["SQLiteRoleProvider"]);
this.Bind<MembershipProvider>()
.ToConstant(Membership.Providers["SQLiteMembershipProvider"]);
This method cannot be called during the application's pre-start initialization stage.
At
>System.Web.dll!System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
in {System.Web.Compilation.BuildManager} System.Web.Compilation.BuildManager
this.Bind()
.ToConstant(Roles.Providers[“SQLiteRoleProvider]”);
this.Bind()
.ToConstant(Membership.Providers[“SQLItemMembershipProvider”]);
在应用程序的预启动初始化阶段无法调用此方法。
在
>System.Web.dll!System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
在{System.Web.Compilation.BuildManager}System.Web.Compilation.BuildManager中
我查了很多博客,问了很多问题
也没有成功
以前有人遇到过这个错误消息吗?我也遇到了很大的问题。与Ninject不兼容的提供者。我一直没弄明白。我决定让它固定而不是注射。我将所有内容抽象为一个服务,并针对这个服务类进行了Ninject绑定。我最终得到了一个使用实体框架成员资格提供程序硬编码的服务,如果我需要另一个提供程序,我必须实现另一个使用该提供程序硬编码的服务 使用简单的服务类进行注入可以工作,但使用
ToConstant()
直接绑定到提供程序时无法工作
public class AccountMembershipService : IMembershipService
{
private readonly MembershipProvider _provider;
private readonly IAccountRepository _accountRepository;
private readonly IFirmsRepository _firmsRepository;
private readonly IRepository<Client> _clientsRepository;
public AccountMembershipService(IAccountRepository accountRepository, IFirmsRepository firmRepository,
IRepository<Client> clientsRepository)
{
_provider = System.Web.Security.Membership.Providers["EfMembershipProvider"];
_accountRepository = accountRepository;
_firmsRepository = firmRepository;
_clientsRepository = clientsRepository;
}
...
公共类AccountMembershipService:IMembershipService
{
私有只读成员资格提供商_提供商;
私有只读IAccountRepository\u accountRepository;
私人只读IFirmsRepository\u firmsRepository;
私人只读IRepository(u clients repository);;
public AccountMembership服务(IAccountRepository accountRepository、IFirmsRespository firmRepository、,
i潜在客户(潜在客户)
{
_provider=System.Web.Security.Membership.Providers[“EfMembershipProvider”];
_accountRepository=accountRepository;
_firmsRepository=firmsRepository;
_clientsRepository=clientsRepository;
}
...
global.asax.cs
Bind<IFormsAuthenticationService>().To<FormsAuthenticationService>();
Bind<IMembershipService>().To<AccountMembershipService>();
Bind<IAccountRepository>().To<EntityFrameworkAccountProvider>();
// never worked
//Bind<MembershipProvider>().ToConstant(System.Web.Security.Membership.Providers["EfMembershipProvider"]);
Bind().To();
绑定()到();
绑定()到();
//没用
//Bind().ToConstant(System.Web.Security.Membership.Providers[“EfMembershipProvider”]);
更改绑定代码将解决此问题
this.Bind<RoleProvider>().ToProvider<SQLiteRoleProvider>();
this.Bind<MembershipProvider>().ToProvider<SQLiteMembershipProvider>();
this.Bind().ToProvider();
this.Bind().ToProvider();
只需使SQLiteMembershipProvider
和SQLiteRoleProvider
实现IProvider
如果您推迟初始化,它就会恢复正常。堆栈跟踪和相关代码是什么?我已经包括了有用的部分,但我也添加了Ninject部分。如何推迟初始化?通过将其绑定到提供程序。