我在MVC应用程序中使用EF 6和Unity 3.5。我想知道使用Unity配置DbContext的正确方法是什么。
根据我的理解,这更合适。
container.RegisterType<IdbContext, MyContext>(new PerRequestLifetimeManager());
任何人都可以确认这是否是正确的做法?
假设上面的代码是正确的,如果我在一些ServiceLayer中注入它,我是否需要处理我的上下文?
答案 0 :(得分:0)
是的,我已经看过很多次了。但是当它在控制器中使用时,请确保覆盖Dispose()方法
答案 1 :(得分:0)
我更喜欢使用构造函数注入
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
..... // others
container.RegisterType<IMyDbContext, MyDbContext>(
new TransientLifetimeManager(),
new InjectionConstructor(infConfig.azure.dbConnectionString,
DbValidationMode.Enabled,
DbLazyLoadingMode.Disabled,
DbAutoDetectMode.Enabled));
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
然后在控制器中我使用
public class HomeController : ApiController (webApi) or Controller (MVC)
{
IMyDbContext db;
public HomeController(IMyDbContext db)
{
this.db = db;
}
[HttpGet]
public HttpResponseMessage GetSomething()
{
var someEntities = db.SomeEntities.ToList();
... etc
}
当请求实例终止时,它将处理您的上下文。它只在你的控制器中有作用域。