博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF PRISM开发入门二(Unity依赖注入容器使用)
阅读量:7050 次
发布时间:2019-06-28

本文共 3283 字,大约阅读时间需要 10 分钟。

原文:

这篇博客将通过一个控制台程序简单了解下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
(); container.RegisterType
(); container.RegisterType
(); container.RegisterType
(); container.RegisterType
(); ICalculateRelpLoop loop = container.Resolve
(); loop.Run();}

在Main方法中将需要实例化的类都先注册进来,container.RegisterType<ICalculateRelpLoop, CalculateRelpLoop>(); 需要使用时,可以通过

container.Resolve<CalculateRelpLoop>()实例化出相应的对象引用。这样一个类的实例化,销毁等都交给了Unity来帮助我们完成。这样代码更加清爽整洁。PRISM默认提供了Unity依赖注入容器,当然我们也可以使用其他自己熟悉的依赖注入容器来代替。

另外Unity除了可以使用代码来注册类,还可以使用配置文件的方式。

感谢您的阅读,代码点击下载。

转载地址:http://kjpol.baihongyu.com/

你可能感兴趣的文章
teamtalk服务端之完美一键部署脚本(ubuntu)
查看>>
2014.7.26 为cocos2d-x3.2版本增加protobuffer2.5.0支持
查看>>
Java进阶篇设计模式之一 ----- 单例模式
查看>>
字符串循环右移算法
查看>>
一分钟了解数据库扩展
查看>>
MyBatis在Spring中的事务管理
查看>>
springboot2.0下为JPA定义多个默认数据源
查看>>
谁来为程序猿的996买单?
查看>>
面试题(6)
查看>>
2017-07-07
查看>>
EasyUI介绍
查看>>
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
查看>>
微信相册
查看>>
java验证码/servlet
查看>>
1:spring mvc 概述
查看>>
Java 打包成 exe 文件
查看>>
go开发环境goclipse的安装
查看>>
Android NDK学习(2)使用cygwin生成.so库文件
查看>>
android使用notifyDataSetChanged()方法,listview数据没有更新
查看>>
MySQL中group_concat函数
查看>>