您的位置:首页 > 移动开发 > Unity3D

WPF PRISM开发入门二(Unity依赖注入容器使用)

2016-02-18 16:57 706 查看
这篇博客将通过一个控制台程序简单了解下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除了可以使用代码来注册类,还可以使用配置文件的方式。

感谢您的阅读,代码点击这里下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: