public VMIContextViewModel( IContext context, IPluginConfigAccessor config, ILogService logService, IHelpViewerService helpService )
{
DisplayName = "Object explorer";
Context = context;
Config = config;
HelpService = helpService;
InitializeCommands();
_plugins = new Dictionary<IPluginInfo, VMIPlugin>();
_allServices = new Dictionary<IServiceInfo, VMIService>();
_dynamicServices = new Dictionary<IServiceInfo, VMIService>();
_serviceRefs = new Dictionary<IServiceReferenceInfo, VMIService>();
_assemblies = new Dictionary<IAssemblyInfo, VMIAssembly>();
_pluginRunner = Context.GetService<PluginRunner>( true );
_pluginRunner.ApplyDone += new EventHandler<ApplyDoneEventArgs>( OnApplyDone );
NotificationService = context.GetService<INotificationService>();
Assemblies = new VMCollection<VMIAssembly, IAssemblyInfo>( PluginRunner.Discoverer.AllAssemblies, FindOrCreate );
Plugins = new VMCollection<VMIPlugin, IPluginInfo>( PluginRunner.Discoverer.AllPlugins.OrderBy( p => p.PublicName ), FindOrCreate );
AllServices = new VMCollection<VMIService, IServiceInfo>( PluginRunner.Discoverer.AllServices, FindOrCreate );
DynamicServices = new VMCollection<VMIService, IServiceInfo>( PluginRunner.Discoverer.AllServices.Where( p => p.IsDynamicService ), FindOrCreateDynamic );
Categories = new ObservableCollection<VMIFolder>();
_vmLogConfig = new VMLogConfig( this, logService );
_vmLogConfig.Initialize();
OsInfo = new VMOSInfo( this );
VMApplicationInfo = new VMApplicationInfo( this );
Dictionary<string, List<IPluginInfo>> categoryFolders = new Dictionary<string, List<IPluginInfo>>();
foreach( IPluginInfo plugin in PluginRunner.Discoverer.AllPlugins )
{
foreach( string categ in plugin.Categories )
{
List<IPluginInfo> col;
if( !categoryFolders.TryGetValue( categ, out col ) )
{
col = new List<IPluginInfo>();
col.Add( plugin );
categoryFolders.Add( categ, col );
}
else
{
col.Add( plugin );
}
}
}
foreach( KeyValuePair<string, List<IPluginInfo>> item in categoryFolders )
{
VMCollection<VMAlias<VMIPlugin>, IPluginInfo> collection = new VMCollection<VMAlias<VMIPlugin>, IPluginInfo>( item.Value, ( info ) => { return new VMAlias<VMIPlugin>( FindOrCreate( info ), null ); } );
VMIFolder folder = new VMIFolder( collection, item.Key );
Categories.Add( folder );
}
}