Autofac DbContext已被处理
我已经阅读过这篇文章DbContext已经处理掉并且autofac但是我仍然得到同样的错误:
由于已经处理了DbContext,因此无法完成操作。
public class EFRepository : IRepository { private EFDbContext context; public EFRepository(EFDbContext ctx) { context = ctx; } public TEntity FirstOrDefault(Expression<Func> predicate, params Expression<Func>[] includes) where TEntity : class, IContextEntity { IQueryable query = includes.Aggregate<Expression<Func>, IQueryable> (context.Set(), (current, expression) => current.Include(expression)); return query.FirstOrDefault(predicate); } }
而在Global.asax中
ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.Register(c => new EFRepository(new EFDbContext())); ILifetimeScope container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
控制器注入:
public class AccountController : Controller { private readonly IRepository repository; private readonly IMembershipService membershipService; public AccountController(IRepository repo, IMembershipService mmbrSvc) { repository = repo; membershipService = mmbrSvc; } [HttpPost] public ActionResult Login(LoginViewModel viewModel) { if (!ModelState.IsValid) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); string returnUrl = (string)TempData["ReturnUrl"]; LoginDto accountDto = viewModel.GetLoginStatus(repository, membershipService, returnUrl); string accountDtoJson = JsonHelper.Serialize(accountDto); return Content(accountDtoJson, "application/json"); } }
然后在LoginViewModel中:
public LoginDto GetLoginStatus(IRepository repo, IMembershipService mmbrSvc, string returnUrl) { repository = repo; membershipService = mmbrSvc; User user = repository.FirstOrDefault(x => x.Username == Username, x => x.Membership); ............ ............ }
您需要使用AutoFac注册DbContext
本身并为其指定适当的生命周期。 InstancePerDependency
通常适用于存储库。
builder.RegisterType().AsSelf().InstancePerDependency();
然后,您不需要为存储库注册一个对象,只需注册该类型(记住也要指定生命周期):
builder.Register().As().InstancePerLifetimeScope();
- MVC:在Application启动时运行方法而不从Application_Start调用它
- SendMailAsync:在异步操作仍处于挂起状态时完成的异步模块或处理程序
- 当url包含编码的&符号时,MVC WEB API路由失败
- entity frameworkC#插入数据俄语编码问题
- 测试自定义AuthorizationAttribute时抛出NullReferenceException
- 测试HtmlHelper时如何解决图像路径问题?
- 如果错误已经逐字段显示,如何不显示ASP MVC ValidationSummary?
- MVC中的Worldpay集成问题
- 如何从ASP.NET MVC解决方案调用外部URL