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用法探索系列

完整代码下载







本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_with_unity.html,如需转载请自行联系原作者
目录
相关文章
|
XML 存储 JavaScript
sap.ui.core.Configuration 的作用简析
sap.ui.core.Configuration 的作用简析
|
API 图形学
【Unity细节】RigidBody中Dynamic和Kinematic的区别
【Unity细节】RigidBody中Dynamic和Kinematic的区别
140 0
|
存储 JSON API
Qt开发技术:Qt的动态静态插件框架介绍和Demo
Qt开发技术:Qt的动态静态插件框架介绍和Demo
Qt开发技术:Qt的动态静态插件框架介绍和Demo
|
JavaScript 前端开发 容器
走进webpack(2)--第三方框架(类库)的引入及抽离
  正文之前,由于这是一个系列的文章,可能第一次看到的看官老爷们会觉得突兀,如果你是webpack新手,我建议你先从前几篇文章看起,如果你对webpack有一些了解,也希望可以在github上下载代码,对照着看会更有效果   在当代的前端开发中,很少会用原生JS来开发页面,最基本的都会使用jQuery来节省我们开发的时间和效率,而angular,vue,react的出现更是为前端开发者带来了福音。
1733 0
|
数据库 .NET 开发框架
【译】EntityFramework6与EntityFrameworkCore的区别
EntityFramework6 EF6 是一个久经考验的数据库访问技术,发展多年,拥有许多特性,并且成熟稳定。2008年EF作为 .Net 3.5 Sp1 和Visual Studio 2008 SP1 的一部分首次发布。
1455 0