entity-framework-4 – 在我的自定义MembershipProvider中使用Ni
我使用Entity Framework 4和ASP.NET MVC 3.我创建了一个自定义成员资格提供程序并使用Ninject将EFAccountRepository注入其中(将IAccountRepository绑定到EFAccountRepository).
此帐户存储库中注入了ObjectContext.我还在我的控制器中使用此存储库(和其他人).出于这个原因,当我将IContext绑定到我的ObjectContext时,我将范围设置为“每个请求”,因此ObjectContext只存在于一个请求中并在存储库之间共享. 尝试登录时,有时会出现以下错误:“ObjectContext实例已被处理,无法再用于需要连接的操作.” 我想知道会员提供商经常被实例化的频率.我通过使用[Inject]标记repository属性并在global.asax文件中的Application_Start函数中调用Kernel.Inject,将存储库注入到成员资格提供程序中. 如果提供者被多次实例化,我将不得不再次注入.但是,我没有得到空指针异常,所以我不认为是这样. 更新1 这是一些代码: MyNinjectModule.cs public override void Load() { Bind<IMyContext>().To<MyObjectContext>().InRequestScope(); // put bindings here Bind<IAccountRepository>().To<EFAccountRepository> } Global.asax中 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); var kernel = new StandardKernel(new MyNinjectModule()); ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory(kernel)); kernel.Inject(Membership.Provider); } MyMembershipProvider.cs [Inject] public IAccountRepository accountRepository { get; set; } public override bool ValidateUser(string username,string password) { // I get the exception here. return (from a in accountRepository.Accounts where a.UserName == username && a.Password == password select true).SingleOrDefault(); } EFAccountRepository.cs private readonly IMyContext context; public EFAccountRepository(IMyContext context) { this.context = context; } public IQueryable<Account> Accounts { get { return context.Accounts; } } MyObjectContext.cs public class MyObjectContext : ObjectContext,IMyContext { public IObjectSet<Account> Accounts { get; private set; } public FlorenceObjectContext() : this("name=DomainModelContainer") { } public FlorenceObjectContext(string connectionString) : base(connectionString,"DomainModelContainer") { Accounts = CreateObjectSet<Account>(); } } PS:我总是乐于接受对我的代码的评论;). 解决方法
例外情况表明您错误地处理了处理您的上下文.在某处你调用context.Dispose(或者在使用中有上下文),但之后你想再次使用上下文,这是不可能的,因为已经处理了上下文.如果您正在使用每个请求上下文,则必须在请求处理结束时(当您确定没有代码将使用上下文时)仅配置一次上下文.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如果我在ASP.NET网页中打开数据库连接会发生什么
- 关于WCF的一个非常“无语”的BUG!
- asp.net – 为什么我在查看浏览器功能时会得到这些奇怪的结
- Asp.net MVC企业级开发(09)---T4模板
- 排序 – sortdir没有在MVC 3 WebGird中使用枚举数据类型
- pdf-generation – 如何在ASP.NET中创建PDF
- ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法
- 如何在ASP.Net Gridview中添加“确认删除”选项?
- asp.net – 如何在警告框中显示验证控件的错误消息?
- asp.net-mvc – ASP.NET MVC 3用户验证