public void ConfigureServices(IDependencyContainer container) { container.AddSingleton <ITaskScheduler, DefaultTaskScheduler>(); container.AddTransient <IConfiguration, YamlConfiguration>("yaml", null); container.AddTransient <IConfiguration, JsonConfiguration>("json"); container.AddTransient <IConfiguration, XmlConfiguration>("xml"); container.AddSingleton <IRocketConfigurationProvider, RocketConfigurationProvider>(); container.AddSingleton <ILogger, ConsoleLogger>("console_logger"); container.AddSingleton <ILogger, LoggerProxy>("proxy_logger", null); container.AddSingleton <IEventBus, EventBus>(); container.AddSingleton <ICommandHandler, DefaultCommandHandler>("default_cmdhandler"); container.AddSingleton <ICommandHandler, CommandHandlerProxy>("proxy_cmdhandler", null); container.AddSingleton <IPluginLoader, DefaultClrPluginLoader>("dll_plugins"); container.AddSingleton <IPluginLoader, NuGetPluginLoader>("nuget_plugins"); container.AddSingleton <IPluginLoader, PluginLoaderProxy>("proxy_plugins", null); container.AddSingleton <ICommandProvider, RocketCommandProvider>("rocket_cmdprovider"); container.AddSingleton <ICommandProvider, CommandProviderProxy>("proxy_cmdprovider", null); var configPermissions = container.Activate <ConfigurationPermissionProvider>(); container.AddTransient <IPermissionProvider>(configPermissions, "default_permissions", null); container.AddTransient <IPermissionChecker>(configPermissions, "default_permissions"); container.AddSingleton <IPermissionChecker, ConsolePermissionChecker>("console_checker"); container.AddSingleton <IPermissionChecker, PermissionProviderProxy>("proxy_checker", null); container.AddTransient <ITranslationCollection, TranslationCollection>(); container.AddSingleton <IUserManager, UserManagerProxy>(); }
protected virtual IPlugin LoadPluginFromAssembly(Assembly pluginAssembly, out IDependencyContainer pluginContainer) { pluginContainer = null; string loc = GetAssemblyLocationSafe(pluginAssembly); if (!string.IsNullOrEmpty(loc) && !cachedAssemblies.ContainsKey(loc)) { cachedAssemblies.Add(loc, pluginAssembly); } Type[] types; try { types = pluginAssembly.GetTypes(); } catch (ReflectionTypeLoadException e) { types = e.Types; } Type pluginType = null; foreach (Type type in types.Where(t => t != null)) { if (type.IsAbstract || type.IsInterface) { continue; } if (type.GetCustomAttributes(typeof(DontAutoRegisterAttribute), true).Any()) { continue; } if (pluginType == null && typeof(IPlugin) != type && typeof(IPlugin).IsAssignableFrom(type)) { pluginType = type; } } if (pluginType == null) { return(null); } pluginContainer = Container.CreateChildContainer(); pluginContainer.AddTransient <IPluginLoader>(this); IPlugin pluginInstance = (IPlugin)pluginContainer.Activate(pluginType); if (pluginInstance == null) { throw new Exception("Failed to activate: " + pluginType.FullName + ". Is your plugin constructor public?"); } Container.AddTransient(pluginInstance, pluginInstance.Name); pluginContainer.AddTransient(pluginInstance); IEnumerable <Type> pluginCommands = pluginInstance.FindTypes <ICommand>(false, c => !typeof(IChildCommand).IsAssignableFrom(c) && c.GetCustomAttributes(typeof(DontAutoRegisterAttribute), true).Length == 0); IEnumerable <Type> dependencyRegistrators = pluginInstance.FindTypes <IServiceConfigurator>(false); foreach (Type registrator in dependencyRegistrators) { ((IServiceConfigurator)Activator.CreateInstance(registrator)).ConfigureServices(Container); } foreach (Type command in pluginCommands) { try { ICommand cmdInstance = (ICommand)pluginContainer.Activate(command); if (cmdInstance != null) { pluginContainer.AddSingleton(cmdInstance, cmdInstance.Name); } } catch (Exception ex) { Logger.LogError(null, ex); } } return(pluginInstance); }