这篇博客将通过一个控制台程序简单了解下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. ADO.NET和ADO.NET Entity Framework

    ADO.NET 3.0 用于访问和操作数据的两个主要组件是 .NET Framework 数据提供程序和 DataSet. .NET Framework 数据提供程序 .NET Framework 数 ...

  2. 【Unity3D】Invoke,InvokeRepeating ,Coroutine 延迟调用,周期性调用

    Invoke和InvokeRepeating方法,可以实现延迟调用,和周期调用 第一个是执行一次,第二个是重复执行 void Invoke(string methodName, float time) ...

  3. linux多线程下载工具mwget

    linux多线程下载工具mwget 经常使用wget进行文件下载,然而wget的处理速度并不如人意.遇到一些国外的站点,经常慢得像蜗牛一般.然而为了解决这个问题,便有了mwget:m表示multi多线 ...

  4. vs2008与windbg的使用

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.使用windgb进行程序调试是一个很有必要的技能. ...

  5. 禁用visual studio实时调试器

    最近每次开机时都会出来一个visual Studio实时调试器,报“发生了未处理的异常(‘System ComponentModel.Win32Exception’,发生位置是 BSSocketSms ...

  6. python(pyqt)开发环境搭建

    eric+pyqt 安装(python开发工具) 更多 0 Python python Eric是一个开源的.跨平台的python&ruby集成开发环境,基于python和pyqt运行.eri ...

  7. 【leetcode】Combination Sum III(middle)

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  8. IOS- DocumentInteraction Controllerl的使用

    iOS提供了使用其他app预览文件的支持,这就是Document Interaction Controller.此外,iOS也支持文件关联,允许其他程序调用你的app打开某种文件.而且,从4.2开始, ...

  9. [Android Pro] Test win

    http://www.cnblogs.com/mayingbao/ http://www.cnblogs.com/hyddd/

  10. grep(Global Regular Expression Print)

    .grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...