Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何使用Unity DI传递DbContext?_Asp.net Mvc_Entity Framework_Unity Container - Fatal编程技术网

Asp.net mvc 如何使用Unity DI传递DbContext?

Asp.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) {

我使用的是最新版本的MVCEF&Unity

 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();
        }
    }