WPF PRISM开发入门二(Unity依赖注入容器使用)
2016-02-18 16:57
706 查看
这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用。我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下:
当前代码可以点击这里下载。
运行效果如下:
下面将引入Unity类库,使用Unity来生成需要的对象实例。
先查看一下CalculateRelpLoop类,
主工程中调用Program.cs
我们手动的创建这些类,然后调用其中的方法,这时候我们可以借助于Unity类来做,在主工程中引用Microsoft.Practices.Unity.dll, 对这两个类进行一些调整。
修改后的CalculateRelpLoop类,
Program.cs
在Main方法中将需要实例化的类都先注册进来,container.RegisterType<ICalculateRelpLoop, CalculateRelpLoop>(); 需要使用时,可以通过
container.Resolve<CalculateRelpLoop>()实例化出相应的对象引用。这样一个类的实例化,销毁等都交给了Unity来帮助我们完成。这样代码更加清爽整洁。PRISM默认提供了Unity依赖注入容器,当然我们也可以使用其他自己熟悉的依赖注入容器来代替。
另外Unity除了可以使用代码来注册类,还可以使用配置文件的方式。
感谢您的阅读,代码点击这里下载。
当前代码可以点击这里下载。
运行效果如下:
下面将引入Unity类库,使用Unity来生成需要的对象实例。
先查看一下CalculateRelpLoop类,
public class CalculateRelpLoop : ICalculateRelpLoop { ICalculateService _calculateService; IInputParserService _inputParserService; IInputService _inputService; IOutputService _outputService; public CalculateRelpLoop() { _calculateService = new CalculateService(); _inputParserService = new InputParserService(); _outputService = new ConsoleOutputService(); _inputService = new ConsoleInputService(); } public void Run() { while(true) { try { string input = _inputService.ReadCommand(); Arguments args = _inputService.ReadArguments(); CommandType commandType = _inputParserService.CommandParser(input); string result = _calculateService.Execute(commandType, args).ToString(); _outputService.WriteMessage(result); } catch { _outputService.WriteMessage("Mistake!"); } } } }
主工程中调用Program.cs
static void Main(string[] args) { ICalculateRelpLoop loop = new CalculateRelpLoop(); loop.Run(); }
我们手动的创建这些类,然后调用其中的方法,这时候我们可以借助于Unity类来做,在主工程中引用Microsoft.Practices.Unity.dll, 对这两个类进行一些调整。
修改后的CalculateRelpLoop类,
public class CalculateRelpLoop : ICalculateRelpLoop { ICalculateService _calculateService; IInputParserService _inputParserService; IInputService _inputService; IOutputService _outputService; public CalculateRelpLoop(ICalculateService calculateService, IInputParserService inputParserService, IInputService inputService, IOutputService outputService) { _calculateService = calculateService; _inputParserService = inputParserService; _outputService = outputService; _inputService = inputService; } public void Run() { while(true) { try { string input = _inputService.ReadCommand(); Arguments args = _inputService.ReadArguments(); CommandType commandType = _inputParserService.CommandParser(input); string result = _calculateService.Execute(commandType, args).ToString(); _outputService.WriteMessage(result); } catch { _outputService.WriteMessage("Mistake!"); } } } }
Program.cs
static void Main(string[] args) { UnityContainer container = new UnityContainer(); container.RegisterType<ICalculateRelpLoop, CalculateRelpLoop>(); container.RegisterType<ICalculateService, CalculateService>(); container.RegisterType<IInputParserService, InputParserService>(); container.RegisterType<IOutputService, ConsoleOutputService>(); container.RegisterType<IInputService, ConsoleInputService>(); ICalculateRelpLoop loop = container.Resolve<CalculateRelpLoop>(); loop.Run(); }
在Main方法中将需要实例化的类都先注册进来,container.RegisterType<ICalculateRelpLoop, CalculateRelpLoop>(); 需要使用时,可以通过
container.Resolve<CalculateRelpLoop>()实例化出相应的对象引用。这样一个类的实例化,销毁等都交给了Unity来帮助我们完成。这样代码更加清爽整洁。PRISM默认提供了Unity依赖注入容器,当然我们也可以使用其他自己熟悉的依赖注入容器来代替。
另外Unity除了可以使用代码来注册类,还可以使用配置文件的方式。
感谢您的阅读,代码点击这里下载。
相关文章推荐
- Unity3d LineRenderer画线
- unity从一个工程复制到另一个工程时模型变小
- Unity3d模型问题
- unity3d DOTween插件学习笔记
- Unity中SendMessage和Delegate效率比较
- Unity中SendMessage和Delegate效率比较
- 一些shader的基本规则
- unity3d 直接播放mp3
- [Unity2d系列教程] 004.Unity如何调用ios的方法(SDK集成相关)
- Unity3D Web Player 无法自动更新的解决思路
- Unity3d 中的 A*寻路
- Unity3D 调用C++的Dll代码
- Unity2D 入门总结
- [Unity]Android(安卓)代码安卓APK时,使用系统安装器安装的[最正确]办法(不弹出选择打开的程序)
- Unity3d修炼之路:用Mesh绘制一个Cube
- unity shader 可编程管线(二) 顶点和片段着色器(Vertex Shader and Fragmet Shader)
- unity shader 可编程管线(一) 表面着色器SurfaceShader
- Unity3d,获取GPS定位信息
- unity shader 固定管线实例(六) 透明度测试剔除尖锐边缘的模糊处理
- Unity读取本地文本txt的研究一