zoukankan      html  css  js  c++  java
  • 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用法探索系列

    完整代码下载

  • 相关阅读:
    CentOS7最小化安装后要做的事
    Django 2.0 新特性
    Django2.+ path配置
    Django 安装
    Django基础
    http协议
    Centos7 下mysql大小写敏感问题
    CentOS 设置mysql的远程访问
    Linux下彻底卸载mysql详解
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/gaochundong/p/entityframework_usage_with_unity.html
Copyright © 2011-2022 走看看