WPF PRISM开发入门二(Unity依赖注入容器使用)
这篇博客将通过一个控制台程序简单了解下PRISM下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除了可以使用代码来注册类,还可以使用配置文件的方式。
感谢您的阅读,代码点击这里下载。
WPF PRISM开发入门二(Unity依赖注入容器使用)的更多相关文章
- WPF PRISM开发入门一( 初始化PRISM WPF程序)
这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码.这个系列的博客将选择PRISM 4. ...
- Unity 依赖注入容器的AOP扩展
使用EntLib\PIAB Unity 实现动态代理 using System; using Unity; using Unity.Interception; using Unity.Intercep ...
- Unity 依赖注入之二
1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...
- Unity依赖注入
一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的 ...
- 使用Microsoft.Practices.Unity 依赖注入
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- Unity依赖注入使用详解
写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...
- 通过Unity依赖注入
前言 Unity容器的思想起始于我在为Web Client Sofitware Factory项目工作的时候,微软的patterns&practices团队已经使用依赖注入的概念好几年了在那时 ...
- Unity轻量级依赖注入容器
一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity
随机推荐
- yuv转bmp
#ifdef _INTERFACE_H #error _INTERFACE_H has be exsisted #else #define _INTERFACE_H #include "st ...
- SQL merge into 表合并
Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源 ...
- JS插件之——ztree
很牛逼的一个树形菜单,树形下拉框插件.一年前用过,很好用.今天又有机会拿过来用,温故一下基本点,nice!! 官方文档说明的非常详细,按照API慢慢看,耐心解读,自然就可以解惑了. 官方文档及其源码下 ...
- poj 1789
http://poj.org/problem?id=1789 这是一道图论的题,个人觉得和那个POJ1258是差不多的,就是多了一步,题目难以读懂 题目的意思:就是给你一群字符串要你找字符串对应的字符 ...
- Html5 postMessage
解释: 跨文档消息传输Cross Document Messaging. 编写代码前注意判断浏览器是否支持Html5 实例: b页面向a页面发送消息. <!DOCTYPE> <htm ...
- web开发架构设计
2015-07-31 13:10:38 一, web服务器 .负载均衡 .不做对URL的rewrite逻辑判断, 全部转发到代码服务器的单一入口文件, 由代码去全权处理 二, 代码服务器(常跟web服 ...
- perl 引用(一)
1. 普通变量引用 variable reference 引用就好比C语言的指针,引用变量存储被引用变量的地址.赋值时注意要在变量前加上 \;使用时要多加一个 $ . 当然,引用也可以成为简单变量,可 ...
- Windows下安装node
1.安装node及npm Windows下安装软件都是傻瓜式安装,首先登陆官网(https://nodejs.org/en/)下载对应的node程序,然后双击进行安装.安装过程基本上是点击'Next' ...
- centos python2.6 升级到 python2.7
一开始有这个需求,是因为用 YaH3C 替代 iNode 进行校园网认证时,一直编译错误,提示找不到 Python 的某个模块,百度了一下,此模块是在 Python2.7 以上才有的,但是系统的自带的 ...
- [第三方]SDWebImage获取网络图片控件的用法
#import "UIImageView+WebCache.h" @interface WeatherViewController ()<UISearchBarDelegat ...