原文: 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除了可以使用代碼來注冊類,還可以使用配置檔案的方式。
感謝您的閱讀,代碼點選