entity-framework – Ninject WebAPI由于DbContext已被处理,操作无法完成
发布时间:2020-05-27 13:01:14 所属栏目:asp.Net 来源:互联网
导读:所以我正在使用一个简单的仓库模式与属性和过滤器建议 here,因为我正在使用来自NuGet的Ninject.Web.WebApi-RC包. 这适用于第一个请求,但是由于我的DbContext在请求范围内,因此它会处理所有后续请求. 这是我的属性: public class CommunicationKeyValidationA
|
所以我正在使用一个简单的仓库模式与属性和过滤器建议 here,因为我正在使用来自NuGet的Ninject.Web.WebApi-RC包. 这适用于第一个请求,但是由于我的DbContext在请求范围内,因此它会处理所有后续请求. 这是我的属性: public class CommunicationKeyValidationAttribute : FilterAttribute
{
}
这是我的过滤器 public class CommunicationKeyValidationFilter : AbstractActionFilter
{
public CommunicationKeyValidationFilter(IRepository repository)
{
this.repository = repository;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
// do stuff
}
}
这是我的存储库: public class Repository : IRepository
{
public Repository(MyDbContext dbContext)
{
this.dbContext = dbContext;
}
}
这是我的Ninject绑定: this.Kernel.Bind<MyDbContext>().ToSelf().InRequestScope();
this.Kernel.Bind<IRepository>().To<Repository>().InRequestScope();
this.Kernel.BindHttpFilter<CommunicationKeyValidationFilter>(FilterScope.Action)
.WhenActionMethodHas<CommunicationKeyValidationAttribute>()
.InRequestScope();
我的控制器如下所示: public class HomeController
{
[CommunicationKeyValidation]
public ActionResult Index()
{
// do stuff
}
这里的问题是CommunicationKeyValidationFilter上的构造函数只在第一个请求中被调用.有没有办法,我可以使ninject在每次尝试解析过滤器时构造此过滤器? 解决方法过滤器被WebApi高速缓存.它们应该处于临时范围,以便WebApi可以管理生命周期.由于长生命周期,您不能有任何具有较短生命周期的依赖关系.您可以做的是在执行过滤器期间创建存储库.为此,最好使用NinjectFactoryExtension注入工厂: public class CommunicationKeyValidationFilter : AbstractActionFilter
{
public CommunicationKeyValidationFilter(IRepositoryFactory repositoryFactory)
{
this.repositoryFactory = repositoryFactory;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
var repository = this.repositoryFactory.CreateRepository();
}
}
public interface IRepositoryFactory { IRepository CreateRepository(); }
kernel.Bind<IRepositoryFactory>().ToFactory(); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net – System.Reflection.Assembly.LoadFil
- 我是否需要在asp.net中取消订阅(手动订阅)活动?
- 在运行时设置ASP.NET母版页
- 如何缓存输出的action方法,返回图像到asp.net mv
- asp.net-mvc – 启用relaxedUrlToFileSystemMapp
- asp.net-mvc – 仅从路由数据生成URL
- 如何处理ASP.NET vNext中的调试/发布配置转换
- asp.net – 记录网页的加载时间
- ASP.NET Core 2.0中Razor页面禁用防伪令牌验证
- 什么是ASP.NET WebForms相当于ASP.NET MVC的View
热点阅读
