【问题标题】:Ninject MVC3 ASP.NET CustomMembershipService with Sqlite SetupNinject MVC3 ASP.NET CustomMembershipService 与 Sqlite 设置
【发布时间】:2011-07-05 11:01:30
【问题描述】:

我在配置自定义 asp.net membership service 时遇到了问题。

绑定模块时,我在应用程序启动时收到一条烦人的消息,这里是:

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

我查看了很多博客和类似的问题

ASP.NET: This method cannot be called during the application's pre-start initialization stage

.net console app lifecycle - working around a pre-start initialization error from BuildManager.GetReferencedAssemblies

http://weblogs.asp.net/leftslipper/archive/2010/07/28/migrating-asp-net-mvc-2-applications-to-asp-net-mvc-3-preview-1.aspx#7635403

也有,但没有成功。

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

【问题讨论】:

  • 堆栈跟踪和相关代码是什么?
  • 我已经包含了有用的部分,但我也添加了 Ninject 部分。

标签: sqlite asp.net-mvc-3 asp.net-membership ninject membership-provider


【解决方案1】:

更改绑定代码将解决问题。

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

只需让SQLiteMembershipProviderSQLiteRoleProvider 实现IProvider

如果你推迟初始化,它会变得正确。

【讨论】:

  • 又怎么能推迟初始化呢?
  • 通过将其绑定到提供者。
【解决方案2】:

我也有很大的问题。一些与 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"]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多