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,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
|
SQL 开发框架 .NET
CodeSmith 简单使用和常用模板
CodeSmith 简单使用和常用模板
64 0
CodeSmith 简单使用和常用模板
|
API 图形学
【Unity细节】RigidBody中Dynamic和Kinematic的区别
【Unity细节】RigidBody中Dynamic和Kinematic的区别
141 0
|
数据库 .NET 开发框架
【译】EntityFramework6与EntityFrameworkCore的区别
EntityFramework6 EF6 是一个久经考验的数据库访问技术,发展多年,拥有许多特性,并且成熟稳定。2008年EF作为 .Net 3.5 Sp1 和Visual Studio 2008 SP1 的一部分首次发布。
1459 0