我所得到的基本上是两个课程Plugin
和PluginLauncher
Plugin是一个抽象类,它实现了一些函数,使类成为PluginLauncher类的插件。
PluginLauncher是一个包含一个集合(SortedDictionary)的类,包括一些帮助函数来启动,停止,重启所有或特定的插件。
它还会在初始化时加载所有插件。每个插件都可以是.exe或.dll,其类继承自Plugin。 为每个插件创建一个AppDomain,并为每个插件设置通信(通过套接字通过简单的IPC消息传递)(仍然需要实现)
我希望有一个非常非常基本的GUI实现,它只包含所有已加载插件的列表,注意插件名称,状态(可以运行,停止,停止,已经过早停止(一个枚举))和一个按钮每个插件启动,停止或重新启动它。
我知道我可以通过在GUI上放置元素并计算每个X / Y位置等来添加这个功能,但我确信WPF有一些预制的'功能'。但我对WPF很新,并且不知道从哪里开始寻找。
一个简单的说明:我被限制为.net 3.5(或更低),因此没有4.0元素。
我已经包含了一个非常简单(万岁的mspaint技能)的例子。
答案 0 :(得分:5)
你的应用程序的插件性质与你如何实现这一点的机制没什么关系。基本上,您需要一组视图模型。该集合中的每个项目代表一个插件(但它同样可以代表客户或鸡腿)。然后,将ItemsControl
绑定到此集合,并定义一个模板,以了解该项目的呈现方式。
以下是一些伪代码,可以帮助您:
public class PluginViewModel : ViewModel
{
public string Name { get; }
public PluginState State { get; private set; }
public ICommand StartCommand { get; }
public ICommand StopCommand { get; }
public ICommand RestartCommand { get; }
}
public class PluginLauncherViewModel : ViewModel
{
// use an ObservableCollection<PluginViewModel> to store your plugin view models
public ICollection<PluginViewModel> Plugins { get; }
}
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Plugins}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Rows="1">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Status}"/>
<Button Command="{Binding StartCommand}">Start</Button>
<Button Command="{Binding StopCommand}">Stop</Button>
<Button Command="{Binding RestartCommand}">Restart</Button>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
毫无疑问,您会遇到一些问题:
答案 1 :(得分:0)