这篇博客将通过一个控制台程序简单了解下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依赖注入容器使用)的更多相关文章

  1. WPF PRISM开发入门一( 初始化PRISM WPF程序)

    这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码.这个系列的博客将选择PRISM 4. ...

  2. Unity 依赖注入容器的AOP扩展

    使用EntLib\PIAB Unity 实现动态代理 using System; using Unity; using Unity.Interception; using Unity.Intercep ...

  3. Unity 依赖注入之二

    1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...

  4. Unity依赖注入

    一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的 ...

  5. 使用Microsoft.Practices.Unity 依赖注入

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  6. 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  7. Unity依赖注入使用详解

    写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...

  8. 通过Unity依赖注入

    前言 Unity容器的思想起始于我在为Web Client Sofitware Factory项目工作的时候,微软的patterns&practices团队已经使用依赖注入的概念好几年了在那时 ...

  9. Unity轻量级依赖注入容器

    一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity

随机推荐

  1. PHP网页缓存技术

    http://blog.sina.com.cn/s/blog_646e51c40100weu9.html 前台静态化:把动态页面解析后保存为静态页面 文件缓存:把查询结果保存为文件,XML 内存缓存: ...

  2. Android SDK 在线更新镜像服务器

    大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口:80 北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.c ...

  3. NGUI Table页(UIToggle和UIToggledObjects)

    1.添加两个按钮Btn1和Btn2.添加2个Spr1和Spr2 2.给每个Btn添加两个脚本UIToggle和UIToggledObjects 3.将每个UIToggle的Group设置个非0的值 4 ...

  4. echo 单引号和双引号

    echo输出 $key=value echo "$key" echo 后面带双引号的话,双引号里面的内容会翻译,输出value echo '$key' echo后面带单引号的话,双 ...

  5. Html5 postMessage

    解释: 跨文档消息传输Cross Document Messaging. 编写代码前注意判断浏览器是否支持Html5 实例: b页面向a页面发送消息. <!DOCTYPE> <htm ...

  6. Mybatis中的in查询和foreach标签

    Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...

  7. Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()

    public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); a ...

  8. Shell编程—定时任务

    应用:定时催收,定时下发,对新增内容入库同步, 时间:凌晨 服务器Reahat Linux: Bash HPUX:kbash? #!/bin/sh #!/bin/bash echo awk #输入重定 ...

  9. ABAP 将SAP用户ID转换成用户名

    FORM frm_coverted_name USING usrid TYPE sy-uname                        CHANGING name TYPE adrp-name ...

  10. 基于NHibernate的开发框架的设计

    上次的 NHibernate的Session管理策略和NHibernateHelper 发布并提供下载,给NHibernate刚入门的同学们带来很多便利. 最近有同学在求NH的通用仓储,正好我最近也设 ...