Caliburn.Micro 依赖注入和容器
Caliburn.Micro 提供了强大的依赖注入(DI)功能,并支持与多种 IoC(控制反转)容器集成,如 SimpleInjector、Autofac、Ninject 等。通过依赖注入,你可以更轻松地管理对象的创建和生命周期,在开发复杂应用程序时减少样板代码。
一、依赖注入的作用
在 MVVM 模式中,依赖注入能够帮助你:
- 自动解析并注入视图模型和服务,简化对象创建。
- 轻松管理对象的生命周期,如单例、瞬态等。
- 通过 IoC 容器提高代码的可测试性和可维护性。
二、在 Caliburn.Micro 中使用依赖注入
Caliburn.Micro 默认提供了一个简单的 IoC 容器,你也可以集成第三方容器来进行更复杂的依赖注入操作。
三、使用默认的 IoC 容器
Caliburn.Micro 自带一个简单的 IoC 容器,通过 SimpleContainer
实现。你可以在自定义的 Bootstrapper
中注册你的类型。
我们将实现一个简单的应用程序,包含以下组件:
- MainViewModel:主视图模型,负责展示应用的主界面。
- ILoggingService:日志服务接口,提供日志功能。
- LoggingService:日志服务的实现类。
- SimpleContainer:用于管理依赖注入的容器。
1. 创建项目结构
项目主要包含两个部分:
- 视图模型(MainViewModel):这是 MVVM 模式的核心部分,负责与视图进行绑定。
- 服务(ILoggingService & LoggingService):服务用于处理日志记录等业务逻辑。
项目结构
CaliburnMicroExample/
│
├── Views/
│ └── MainView.xaml
│
├── ViewModels/
│ └── MainViewModel.cs
│
├── Services/
│ ├── ILoggingService.cs
│ └── LoggingService.cs
│
└── AppBootstrapper.cs
2. 代码实现
2.1 定义服务接口和实现
首先,我们需要定义一个日志服务接口 ILoggingService,然后创建它的实现类 LoggingService。
ILoggingService.cs
namespace CaliburnMicroExample.Services
{
public interface ILoggingService
{
void Log(string message);
}
}
LoggingService.cs
using System;
namespace CaliburnMicroExample.Services
{
public class LoggingService : ILoggingService
{
public void Log(string message)
{
Console.WriteLine($"Log: {
message}");
}
}
}
2.2 定义 ViewModel
在 ViewModel 中,我们通过构造函数注入日志服务 ILoggingService,然后可以在视图模型的方法中调用日志服务来记录日志。
MainViewModel.cs
using Caliburn.Micro;
using CaliburnMicroExample.Services;
namespace CaliburnMicroExample.ViewModels
{
public class MainViewModel : Screen
{
private readonly ILoggingService _loggingService;
public MainViewModel(ILoggingService loggingService)
{
_loggingService = loggingService;
_loggingService.Log("MainViewModel created");
}
public string DisplayName
{
get {
return "Hello from Caliburn.Micro!"; }
}
public void LogMessage()
{
_loggingService.