Asp.net mvc 如何使用Unity DI传递DbContext?
我使用的是最新版本的MVC,EF&UnityAsp.net mvc 如何使用Unity DI传递DbContext?,asp.net-mvc,entity-framework,unity-container,Asp.net Mvc,Entity Framework,Unity Container,我使用的是最新版本的MVC,EF&Unity public interface IUnitOfWork { IGenericRepository<Topic> TopicRepository { get; } bool Commit(); } UnityConfig.cs: public static void RegisterTypes(IUnityContainer container) {
public interface IUnitOfWork
{
IGenericRepository<Topic> TopicRepository { get; }
bool Commit();
}
UnityConfig.cs
:
public static void RegisterTypes(IUnityContainer container)
{
// NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
// container.LoadConfiguration();
// TODO: Register your types here
// container.RegisterType<IProductRepository, ProductRepository>();
container.RegisterType<DbContext>();
//container.RegisterType<DbContext, MFRContext>();
container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());
container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>));
}
...
DbContext
李>
HomeController
中的IUnitOfWork
配置Unity尝试在构造函数中注入工作单元:
public class HomeController : Controller
{
private UnitOfWork _uow;
public HomeController(IUnitOfWork uow)
{
_uow = uow;
}
public ActionResult Index()
{
_uow.TopicRepository.Add(new Topic { Title = "Title 1", Post = "Post 2", CreatedOn = DateTime.Now, CreatedBy = "Ad" });
_uow.TopicRepository.GetAll();
return View();
}
}
通常构造函数注入用于将上下文注入控制器。为什么在控制器中有DbContext??我已经为此定义了UoW。仍然相当于同一件事——您有一个要注入的依赖项。您可能会使用构造函数注入。无论是上下文本身还是具有自己上下文引用的UOW,都不重要。我的EF DBContext应该放在哪一层?在我需要连接到数据库来保存数据之后。@Nexus:你是什么意思?代码中的DbContext是工作单元的一部分,它处理数据库连接。
public class HomeController : Controller
{
private UnitOfWork _uow;
public ActionResult Index(UnitOfWork uow)
{
_uow = uow;
_uow.TopicRepository.Add(new Topic { Title = "Title 1", Post = "Post 2", CreatedOn = DateTime.Now, CreatedBy = "Ad" });
_uow.TopicRepository.GetAll();
return View();
}
}
public class HomeController : Controller
{
private UnitOfWork _uow;
public HomeController(IUnitOfWork uow)
{
_uow = uow;
}
public ActionResult Index()
{
_uow.TopicRepository.Add(new Topic { Title = "Title 1", Post = "Post 2", CreatedOn = DateTime.Now, CreatedBy = "Ad" });
_uow.TopicRepository.GetAll();
return View();
}
}