EntityFramework用法探索(五)引入Unity


上文的EntityFramework用法中,我們引入了Repository模式和UnitOfWork模式。

探索還沒有結束,我們引入Unity依賴注入容器。那用Unity做什么呢?

在上文中,我們手工定義了CustomerRepository中DbContext的,

1       DbContext context = new RETAILContext();
2       DbContextAdapter contextAdaptor = new DbContextAdapter(context);
3 
4       IObjectSetFactory objectSetFactory = contextAdaptor;
5       _repository = new Repository<Customer>(objectSetFactory);
6 
7       IObjectContext objectContext = contextAdaptor;
8       _uow = new UnitOfWork(objectContext);

但如果表數量過多,手工編碼會變得非常繁瑣,使用IoC容器提供的功能來解決。

 1       IUnityContainer container = new UnityContainer()
 2         .RegisterType(typeof(IRepository<>), typeof(Repository<>), new ContainerControlledLifetimeManager())
 3         .RegisterType<IUnitOfWork, UnitOfWork>(new ContainerControlledLifetimeManager())
 4         .RegisterType<DbContext, RETAILContext>(new ContainerControlledLifetimeManager())
 5         .RegisterType<DbContextAdapter>(new ContainerControlledLifetimeManager())
 6         .RegisterType<IObjectSetFactory, DbContextAdapter>(new ContainerControlledLifetimeManager())
 7         .RegisterType<IObjectContext, DbContextAdapter>(new ContainerControlledLifetimeManager())
 8         .RegisterType<ICustomerRepository, CustomerRepository>(new ContainerControlledLifetimeManager());
 9 
10       ICustomerRepository customerRepository = container.Resolve<ICustomerRepository>();

則在CustomerRepository中的配置會簡介些,

1     public CustomerRepository(IUnityContainer container)
2     {
3       Mapper.CreateMap<DomainModels.Customer, Customer>();
4       Mapper.CreateMap<Customer, DomainModels.Customer>();
5 
6       _repository = container.Resolve<Repository<Customer>>();
7       _uow = container.Resolve<UnitOfWork>();
8     }

顯然同樣的測試代碼仍然可以工作,不再贅述。

最后,如果需要可以將UnityContainer注入到ServiceLocator中,以備使用。

1       UnityServiceLocator locator = new UnityServiceLocator(container);
2       ServiceLocator.SetLocatorProvider(() => locator);

完整代碼和索引

EntityFramework用法探索系列

完整代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM