导入MVC3 ASP.. NET CustomMembershipService与Sqlite设置



我在配置自定义asp.net成员服务时遇到了问题。

我有一个恼人的消息在应用程序启动时绑定模块,这里是:

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

我查看了一堆博客和SO问题,如

ASP。此方法不能在应用程序's启动前初始化阶段被调用

.net控制台应用程序的生命周期-解决一个从BuildManager启动前初始化错误。GetReferencedAssemblies

http://weblogs.asp.net/leftslipper/archive/2010/07/28/migrating asp -网- mvc 2 -应用程序- asp -网- mvc 3 -预览- 1. - aspx # 7635403

还没有成功。

以前有人遇到过这个错误信息吗?

修改绑定代码可以解决这个问题。

this.Bind<RoleProvider>().ToProvider<SQLiteRoleProvider>();
this.Bind<MembershipProvider>().ToProvider<SQLiteMembershipProvider>();

SQLiteMembershipProviderSQLiteRoleProvider实现IProvider

如果你推迟初始化它就会恢复正常

我也遇到了很大的问题。关于提供程序的一些东西不能很好地与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;
        }
...

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"]);

最新更新