我有 ASP.NET MVC 应用程序,我首先使用 EF 代码和 Unity 依赖注入器。我已经实现了 DDD 设计并拥有与我的 POCO 对象交互的存储库和服务。
我的问题是我遇到了与 EF 相关的问题 - 例如连接已关闭、实体已更改或未跟踪等等。正如我从谷歌的研究中了解到的那样,它与我应该配置 Unity 的方式有关。
我知道我需要根据请求实例放置它,但正如我所见,Unity 和 Unity.Mvc3 包中都没有内置策略。我尝试编写自己的策略,它解决了许多问题,但我确实遇到了有时我会“连接关闭”的问题。
我的 HttpContextLifetimeManager.cs
public class HttpContextLifetimeManager<T> : LifetimeManager, IDisposable
{
public override object GetValue()
{
return HttpContext.Current.Items[typeof(T).AssemblyQualifiedName];
}
public override void RemoveValue()
{
HttpContext.Current.Items.Remove(typeof(T).AssemblyQualifiedName);
}
public override void SetValue(object newValue)
{
HttpContext.Current.Items[typeof(T).AssemblyQualifiedName] = newValue;
}
public void Dispose()
{
RemoveValue();
}
}
在 DependencyConfig.cs (MVC 4 App_Start) 中,我使用以下方法注册它:
container.RegisterInstance<MyDbContext>(new MyDbContext(), new HttpContextLifetimeManager<DependencyConfig>());
你能推荐我一个有效的实现/帮助我修复我的/将我转发到可以帮助我解决这个问题的文章或教程吗?
非常感谢。