Unity 1.2使用初探(1)
2009-08-04 09:06
453 查看
Unity 1.2使用初探(1)
最近赋闲在家,突然想看一点东西。以前都有用Enterprise Library,对于PolicyInject可使项目辅助功Log,Auth等以更优雅的方式,叹其巧妙。现在微软出了Unity1.2注入容器,但是我在使用这个框架上还是个新手,所以在此学习如何应用。(下载地址: http://www.codeplex.com/unity )
下面是我的一些初步使用,主要参照在 UnityDocs,路过的各位高手哪位有比较完好的中午资料,请是否可共享一下~~;
1,第一个Demo;
以下是一个Demo:首先定义1个接口,1个实现:
public interface ILogService
{
void Write(string message);
}
public class CnsLogService: ILogService
{
#region ILogService 成员
public void Write(string message) {
Console.WriteLine(String.Format("Cns-exception msg:{0}", message));
}
#endregion
}
然后我们可以这样应用Unity:
public static void Main(string[] args) {
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<ILogService, CnsLogService>();
ILogService myServiceInstance = myContainer.Resolve<ILogService>();
myServiceInstance.Write("oh,exception occured!");
}
运行结果如下图:
2, 注入链
发现文档有这样一段内容
大体意思就是你可以注册一连串的类型。代码如上所示:
那么来实现一下:
先再实现一次ILogService
public class DataLogService:ILogService
{
#region ILogService 成员
public void Write(string message) {
DailyPractice.Utility.Log.AddLog(message);
}
#endregion
}
namespace DailyPractice.Utility
{
public class Log
{
public static void AddLog(string message) {
//insert into Log(message) values(@message)
Console.WriteLine(String.Format("Data-exception msg:{0}", message));
}
}
}
然后实现一下注册:
public static void Main(string[] args) {
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<ILogService, CnsLogService>()
.RegisterType<ILogService, DataLogService>();
ILogService myServiceInstance = myContainer.Resolve<ILogService>();
myServiceInstance.Write("oh,exception occured!");
}
结果执行为:
非常意外: CnsLogService并没有执行
然后把代码改成
public static void Main(string[] args) {
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<ILogService, CnsLogService>()
.RegisterType<ILogService, DataLogService>();
IEnumerable<ILogService> myServiceInstances = myContainer.ResolveAll<ILogService>();
foreach (ILogService myServiceInstance in myServiceInstances) { myServiceInstance.Write("haha, you have an exception 了吧!"); }
}
执行结果是:
什么都没有执行???
看过terrylee的blog:http://www.cnblogs.com/terrylee/archive/2008/02/21/unity-application-block-part1.html
发现还有一种实现方式,先看代码:
public static void Main(string[] args) {
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<ILogService, CnsLogService>("CnsLogService")
.RegisterType<ILogService, DataLogService>("DataLogService");
IEnumerable<ILogService> myServiceInstances = myContainer.ResolveAll<ILogService>();
foreach (ILogService myServiceInstance in myServiceInstances) { myServiceInstance.Write("haha, you have an exception 了吧!"); }
}
执行结果是:
执行结果正常,
所以现在就来找原因:terrylee's blog有这么一段
除了可以获取单个对象实例之外,我们还可以一次获取容器中所有与某一接口映射的所有对象实例,但是需要依赖于在注册映射时提供的名称,如果没有指定名称,通过GetAll方法不会被获取到。
相关文章推荐
- Unity 1.2使用初探(2)
- Unity 1.2使用初探(1)
- Unity 1.2使用初探(2)
- AOP---Unity使用初探
- Unity GUI(uGUI)使用心得与性能总结
- ADS 1.2 使用快速入门
- DEELX 1.2正则表达式引擎的使用
- Windows Mobile智能手机今日插件编程开发初探(使用C++, vs2008, Pocket PC 5.0内核)
- Unity读取txt文件并且用字典来使用txt里面的信息
- 复盘王者荣耀手游开发全过程,Unity引擎使用帧同步放弃状态同步
- SQL Server 2005使用基于行版本控制的隔离级别初探(2) -- READ_COMMITTED_SNAPSHOT
- Unity使用DLL库
- 初探JsonCpp - 编译与基本使用
- Unity动画,状态机的使用
- 1.2 KNN算法学习——使用scikit-learn中的KNN模型实现
- 在Unity中使用代码类来管理多个Panel(面板)之间的切换
- [Unity&对象]怎么使用全局静态变量
- [Unity框架]PureMVC在unity中的简单使用
- Unity中直接使用transform和gameObject的效率测试
- [Unity框架]PureMVC在unity中的简单使用