C#使用Unity框架
来源:互联网 发布:网络借贷监管法学 编辑:程序博客网 时间:2024/06/08 01:24
转载自:C#使用Unity框架
上次我总结了.net常用的三个工具:dapper、postsharp、nuget。dapper是开源小工具,执行sql语句封装返回来数据十分方便。postsharp是AOP,即 Aspect-oriented programming(面向横切面编程)。这个主要是为了减少写日志的麻烦。否则每个函数内写日志还是挺麻烦的事情。nuget是C#管理库文件的小工具。其实在C#开发大型工程时,如需开发多个数据库版本时,如果仅使用配置文件则比较麻烦,本文介绍的Unity 框架可以根据配置文件注册相关的接口和实现类,在程序中直接取用即可。当然了开发多数据库版本还有很多方法,目测我之后会介绍利用抽象类来实现的多数据库版本工程。
下面就是转载自大神的总结:
Unity 应用程序块(Unity)是一个轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入。
1.控制反转 (IoC)模式,这是一种设计模式,它描述了用于支持对象可以“查找”它们需要的其他对象的实例的插件架构的技术。
2.依赖注入 (DI)模式,这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术。开发人员编写实现接口的类代码,并基于接口或者对象类型使用容器注入依赖的对象实例到类中。用于注入对象实例的技术是接口注入、构造函数注入、属性(设置器)注入和方法调用注入。
Unity 应用程序块使用容器注册类型和映射的两种方法如下:
A:RegisterType。此方法用容器注册一个类型。在适当的时候,容器将构建一个指定的类型的实例。这可以通过类的特性或者调用 Resolve方法时初始化依赖注入。构建的对象的生命周期与在方法参数中指定的生命周期一致。如果没有指定生命周期的值,将为类型注册一个暂时的生命周期,这意味着容器将为每一个对 Resolve的调用创建一个新的实例。
B:RegisterInstance。此方法将一个指定的类型的已存在的实例注册到容器,并带有指定的生命周期。容器将在生命周期内返回已有的实例。如果没有指定生命周期,实例将拥有容器控制的生命周期。下面将介绍注册实例的四种方式
(1)类型的配置容器注册
作为 RegisterType和 Resolve 方法的重载的一个示例,下列代码注册了一个用于接口 IMyService的映射,将指定容器将返回 CustomerService类(实现了IMyService接口)的实例。
IUnityContainermyContainer = new UnityContainer();
myContainer.RegisterType<IMyService, CustomerService>();
IMyService myServiceInstance = myContainer.Resolve<IMyService>();
(2)已有对象实例的配置容器注册
做为使用RegisterInstance和 Resolve 方法重载的一个示例,下列代码注册了实现了 IMyService接口的 LoggingService类的一个已有实例,然后获取此实例:
IUnityContainermyContainer = new UnityContainer();
LoggingService myExistingObject = new LoggingService();
myContainer.RegisterInstance<IMyService>(myExistingObject);
IMyService myServiceInstance = myContainer.Resolve<IMyService>();
(3)构造函数注入
做为构造函数注入的一个示例,如果开发人员用 Unity容器的 Resolve方法实例化的类有一个构造函数定义了一个或多个对其他类的依赖,Unity容器将自动创建指定在构造函数参数中的依赖的对象实例。例如,下列代码展示了依赖于 LoggingService对象的 CustomerService类。
public classCustomerService
{
public CustomerService(LoggingService myServiceInstance)
{
// work with the dependent instance
myServiceInstance.WriteToLog("SomeValue");
}
}
在运行时,开发人员使用容器的 Resolve方法创建了 CustomerService类的一个实例,这导致了实例生成框架将具体类 LoggingService的一个实例注入到 CustomerService类中。
IUnityContaineruContainer = new UnityContainer();
CustomerService myInstance = uContainer.Resolve<CustomerService>();
(4)属性(设置器)注入
除了前面描述的构造函数注入以外,Unity应用程序块还支持属性和方法调用注入。下列代码示范了属性注入。ProductService类暴露了一个引用另一个名为 SupplierData类(没有定义在下列代码中)的实例的属性。要强制依赖对象的依赖注入,开发人员必须像下列代码中一样使用 Dependency特性装饰属性的声明:
public classProductService
{
private SupplierData supplier;
[Dependency]
public SupplierData SupplierDetails
{
get { return supplier; }
set { supplier = value; }
}
}
- C#使用Unity框架
- C#使用Unity框架
- C#使用Unity框架
- Unity使用C#的多线程
- unity 中使用C#6.0
- [Unity框架]PureMVC在unity中的简单使用
- [Unity]使用Slua框架开发创建Unity引擎中的对象
- [Unity框架]PureMVC在unity中的简单使用
- [Unity框架]PureMVC在unity中的简单使用
- .NET Unity IOC框架使用实例
- C# 生成dll 导入unity中使用
- Unity使用C#高级特性扩展方法
- C# 枚举在Unity 中的使用
- C#多线程与Unity中的使用
- C# 宏定义 - 在unity里面使用
- Unity 使用C#翻转图片并缩放
- Unity中使用 slua --- 调用c#方法
- C#委托/事件在Unity中的使用
- 面试题61:按之字形顺序打印二叉树
- 需求分析方法及包装类
- 关于listview,gridview里面数据显示不全的问题
- 二维码
- HDU 4576(概率DP+滚动数组)
- C#使用Unity框架
- pyqt 修改line Edit的背景颜色
- c++ fstream中seekg()和seekp()的用法
- 十、外观模式Facade(结构型)
- POJ-2007 Scrambled Polygon(计算几何)
- JDK源码学习(1)-HashMap源码分析,HashMap与HashTable的差别
- 进程间通信——mmap()函数
- [HDU5739] Fantasia [2016 Multi-University Training Contest 2(多校联合训练2) F]
- noip2013提高组day201积木大赛