聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> Unity技术之Xml配制文件使用泛型

Unity技术之Xml配制文件使用泛型

时间:2015-02-10 16:17:19    下载该word文档

UnityXml配制文件使用泛型

           在现在项目中,已经得到广泛使用。今天我们来看如何在XML配制文件配制泛型。如下我们这样的一个类型:

1: public interface IRepository

2: {

3: IUnitOfWork UnitOfWork { get; set; }

4: IQueryable All();

5: IQueryable Find(Expression> expression);

6: void Attach(T entity);

7: void Add(T entity);

8: void Delete(T entity);

9: void Save();

10: }

            这是一个Repository模式,【狗刨学习网】假设有以下的实现:

1: public class EFRepository : IRepository where T : class

2: {

3: public IUnitOfWork UnitOfWork { get; set; }

4: private IObjectSet _objectset;

5: private IObjectSet ObjectSet

6: {

7: get

8: {

9: if (_objectset == null)

10: {

11: _objectset = UnitOfWork.Context.CreateObjectSet();

12: }

13: return _objectset;

14: }

15: }

16:  

17: public virtual IQueryable All()

18: {

19: return ObjectSet.AsQueryable();

20: }

21:  

22: public IQueryable Find(Expressionbool>> expression)

23: {

24: return ObjectSet.Where(expression).AsQueryable();

25: }

26:  

27: public void Add(T entity)

28: {

29: ObjectSet.AddObject(entity);

30: }

31:

32: public void Attach(T entity)

33: {

34: ObjectSet.Attach(entity);

35: }

36:  

37: public void Delete(T entity)

38: {

39: ObjectSet.DeleteObject(entity);

40: }

41:  

42: public void Save()

43: {

44: UnitOfWork.Save();

45: }

46: }

在代码中注册是这样的:

1: container.RegisterType();

2: container.RegisterType, EFRepository>();

好的,现在我们从配制文件读取:

1: private static IUnityContainer container;

2:  

3: static ObjectFactory()

4: {

5: container = new UnityContainer();

6:  

7: //container.RegisterType();

8: //container.RegisterType, EFRepository>();

9:  

10: string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "EntLib.config.xml");

11: var map = new ExeConfigurationFileMap { ExeConfigFilename = path };

12:  

13: System.Configuration.Configuration config

14: = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

15: UnityConfigurationSection section

16: = (UnityConfigurationSection)config.GetSection("unity");

17: section.Containers["DefContainer"].Configure(container);

18: }

19:

20: public static T GetInstance()

21: {

22: return container.Resolve();

23: }

关键的XML配制在这儿:

1: <configuration>

2: <configSections>

3: <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.2.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

4: configSections>

5: <unity>

6: <typeAliases>

7: <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />

8: <typeAlias alias="transparentProxy" type="Microsoft.Practices.Unity.InterceptionExtension.TransparentProxyInterceptor, Microsoft.Practices.Unity.Interception" />

9: <typeAlias alias="typeMatchingRule" type="Microsoft.Practices.Unity.InterceptionExtension.TypeMatchingRule, Microsoft.Practices.Unity.Interception" />

10: <typeAlias alias="interception" type="Microsoft.Practices.Unity.InterceptionExtension.Interception, Microsoft.Practices.Unity.Interception" />

11: <typeAlias alias="IRepository`1" type="TestEF4.IRepository`1, TestEF4" />

12: <typeAlias alias="IUnitofwork" type="TestEF4.IUnitOfWork, TestEF4" />

13: typeAliases>

14: <containers>

15: <container name="DefContainer">

16: <types>

17: <type type="IUnitofwork" mapTo="TestEF4.EFUnitOfWork, TestEF4">

18: <lifetime type="singleton" />

19: type>

20: <type type="IRepository`1" mapTo="TestEF4.EFRepository`1, TestEF4">

21: <lifetime type="singleton" />

22: type>

23: types>

24: container>

25: containers>

26: unity>

27: configuration>

注意加粗的字体就是我们泛型。让我们来测试一下:

1: [Test]

2: public void TestUnityGenericTypeConfig()

3: {

4: var productRepository = RepositoryHelper.GetProductRepository();

5: var totalentities = productRepository.All();

6:  

7: Assert.IsNotNull(productRepository);

8: Assert.IsInstanceOf(productRepository);

9: Assert.IsInstanceOf>(productRepository.Repository);

10: Assert.IsInstanceOf(productRepository.Repository.UnitOfWork);

11: }

一切OK了,这就实用使用配制文件实现DI解析泛型。希望对您开发有帮助。

免费下载 Word文档免费下载: Unity技术之Xml配制文件使用泛型

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服