【发布时间】:2015-02-18 02:23:34
【问题描述】:
我正在尝试使用 Unity 作为解析器来创建我的 Breeze Web API 控制器。使用断点,我的 AHSEFContextProvider 的构造函数似乎只被调用一次。 Breeze 每次都需要一个新实例,否则 SaveChanges() 方法无法正常工作。我是 Unity 的新手,但我认为使用 TransientLifetimeManager(我相信无论如何都是默认设置)会导致每次创建一个新实例。下面是从 Global.asax Application_Start 调用的 UnityConfig 代码。关于我哪里出错的任何想法?
var container = new UnityContainer();
container.RegisterType<AHSEFContextProvider<TaskDbContext>>(new TransientLifetimeManager(), new InjectionConstructor("ConnectionStringName"));
container.RegisterType<TaskController>(new TransientLifetimeManager(), new InjectionConstructor(container.Resolve<AHSEFContextProvider<TaskDbContext>>()));
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
【问题讨论】:
-
我认为您可能希望将
PerHttpRequestLifetimeManager用于 EF 上下文。 msdn.microsoft.com/en-us/library/… 。有关更多信息,请参阅以下 SO 帖子:stackoverflow.com/questions/5187562/… -
感谢您的提示,但从 TransientLifetimeManager 更改为 PerResolveLifetimeManager 并没有任何区别。
-
嗯.. 这是一种期望的行为(或者至少应该是)。您不希望上下文的多个实例四处浮动,即使出于某种原因您认为确实如此。你会遇到各种各样的问题。每个请求应该有一个上下文实例。除此之外的任何事情都是自找麻烦。
标签: entity-framework asp.net-web-api unity-container breeze