Caliburn.Micro框架IOC使用例子
时间: 2023-11-17 09:01:42 浏览: 113
Caliburn.Micro框架的IOC容器可以通过在ViewModel中使用构造函数注入的方式来实现。以下是一个使用Caliburn.Micro框架IOC容器的例子:
```csharp
public class MyViewModel : Screen
{
private readonly IMyService _myService;
public MyViewModel(IMyService myService)
{
_myService = myService;
}
// ...
}
```
在上面的例子中,`MyViewModel`类的构造函数中注入了一个`IMyService`类型的参数。当`MyViewModel`实例化时,Caliburn.Micro框架会自动解析`IMyService`类型的实例并将其传递给构造函数。
相关问题
Caliburn.Micro框架配置使用
```shell
Caliburn.Micro框架配置使用步骤:
1. 首先,你需要在你的项目中安装Caliburn.Micro框架,可以通过NuGet包管理器进行安装。
2. 然后,创建一个继承自CaliburnApplication的类,并在Main方法中初始化该类。
3. 接下来,创建ViewModel并继承自Screen类,这样你就可以在View中绑定ViewModel了。
4. 在View中使用cal:Bind.Model属性将ViewModel与View进行绑定。
5. 最后,通过Message.Attach属性将UI事件与ViewModel中的方法进行绑定,实现交互功能。
```
WPF中Caliburn.Micro框架
Caliburn.Micro是一个轻量级的MVVM框架,它可以帮助我们更好地实现WPF应用程序的开发。下面是一些关于Caliburn.Micro框架的介绍和示例:
1.使用Caliburn.Micro实现MEF插件化开发,根据dll插件目录动态加载程序集和主程序的Tab页。
```csharp
// 在App.xaml.cs中添加以下代码
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 创建插件管理器
var pluginManager = new PluginManager();
// 加载插件
pluginManager.LoadPlugins();
// 创建主窗口
var mainWindowViewModel = new MainWindowViewModel(pluginManager);
// 显示主窗口
var mainWindow = new MainWindow();
mainWindow.DataContext = mainWindowViewModel;
mainWindow.Show();
}
```
2.CM框架搭建、事件发布与订阅、log打印、ioc容器、Conductor的用法,框架下的命名约定以及事件绑定、Emgucv进行模板匹配、右键菜单、单例模式等等。
```csharp
// ViewModelBase.cs
public abstract class ViewModelBase : Screen
{
protected readonly IEventAggregator _eventAggregator;
protected readonly ILog _logger;
public ViewModelBase(IEventAggregator eventAggregator, ILog logger)
{
_eventAggregator = eventAggregator;
_logger = logger;
}
// 发布事件
protected void Publish<TEvent>(TEvent @event)
{
_eventAggregator.PublishOnUIThread(@event);
}
// 订阅事件
protected void Subscribe<TEvent>(Action<TEvent> action)
{
_eventAggregator.Subscribe(action, ThreadOption.UIThread);
}
// 打印日志
protected void Log(string message)
{
_logger.Info(message);
}
}
// ShellViewModel.cs
public class ShellViewModel : Conductor<object>.Collection.OneActive
{
private readonly IWindowManager _windowManager;
private readonly IEventAggregator _eventAggregator;
private readonly ILog _logger;
private readonly IContainer _container;
public ShellViewModel(IWindowManager windowManager, IEventAggregator eventAggregator, ILog logger, IContainer container)
{
_windowManager = windowManager;
_eventAggregator = eventAggregator;
_logger = logger;
_container = container;
// 订阅事件
_eventAggregator.Subscribe(this);
}
// 打开新窗口
public void OpenWindow()
{
var viewModel = _container.Resolve<NewWindowViewModel>();
_windowManager.ShowDialog(viewModel);
}
// 关闭窗口
public void CloseWindow()
{
TryClose();
}
// 处理事件
public void Handle(MyEvent @event)
{
// 处理事件
}
}
// ShellView.xaml
<UserControl x:Class="MyApp.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu Grid.Row="0">
<MenuItem Header="File">
<MenuItem Header="Open" cal:Message.Attach="OpenWindow" />
<MenuItem Header="Close" cal:Message.Attach="CloseWindow" />
</MenuItem>
</Menu>
<ContentControl Grid.Row="1" cal:View.Model="{Binding ActiveItem}" />
</Grid>
</UserControl>
```
阅读全文