entity-framework-4 – 在我的自定义MembershipProvider中使用Ninject注入的Ob
|
我使用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中js+jquery添加下拉框值和后台获取示例
- asp.net – IIS 7禁用“需要SSL”
- asp.net-mvc-4 – GAC问题不能在IIS上托管应用程序
- asp.net – 调用RenderSection两次?
- asp.net-mvc – PRG模式是否与AJAX表单帖子不兼容?
- 如何测量Live ASP.NET MVC Web应用程序的内存使用情况?
- asp.net-mvc – 如何阻止URL.Action包含参数?
- asp.net-mvc – ASP .Net MVC 3:子动作和重定向
- asp.net-mvc – Razor ViewEngine HTML.Checkbox方法创建一
- asp.net-mvc – 保存为“BodyPart_3ded2bfb-40be-4183-b789
- OWIN上的CORS和访问/令牌导致“Access-Control-A
- Global.asax中的ASP.NET会话
- 在mvc4 asp.net中的Razor View中的模型声明
- asp.net-mvc-2 – ASP.NET MVC2 ModelMetadataPr
- 内容管理 – ASP.NET建议[已结束]
- asp.net-mvc – 将ASP.NET MVC布局应用于Jquery.
- asp.net-mvc – ASP.NET MVC是否容易受到oracle的
- asp.net-mvc-3 – 如何关闭我的整个ASP.NET MVC
- asp.net-mvc – 使用Windows身份验证与活动目录组
- 最佳实践ASP.NET成员资格:同一数据存储区中的用
