public virtual void Configure(IEngine engine, ContainerManager containerManager, WaterMoonConfig configuration) { //other dependencies containerManager.AddComponentInstance<WaterMoonConfig>(configuration, "watermoon.configuration"); containerManager.AddComponentInstance<IEngine>(engine, "watermoon.engine"); containerManager.AddComponentInstance<ContainerConfigurer>(this, "watermoon.containerConfigurer"); //type finder containerManager.AddComponent<ITypeFinder, WebAppTypeFinder>("watermoon.typeFinder"); //register dependencies provided by other assemblies var typeFinder = containerManager.Resolve<ITypeFinder>(); containerManager.UpdateContainer(x => { var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>(); var drInstances = new List<IDependencyRegistrar>(); foreach (var drType in drTypes) drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType)); //sort drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList(); foreach (var dependencyRegistrar in drInstances) { dependencyRegistrar.Register(x, typeFinder); } }); }
public static IEngine CreateEngineInstance(WaterMoonConfig config) { if (config != null && !string.IsNullOrEmpty(config.EngineType)) { var engineType = Type.GetType(config.EngineType); if (engineType == null) throw new ConfigurationErrorsException("The type '" + engineType + "' could not be found. Please check the configuration at /configuration/nop/engine[@engineType] or check for missing assemblies."); if (!typeof(IEngine).IsAssignableFrom(engineType)) throw new ConfigurationErrorsException("The type '" + engineType + "' doesn't implement 'Nop.Core.Infrastructure.IEngine' and cannot be configured in /configuration/nop/engine[@engineType] for that purpose."); return Activator.CreateInstance(engineType) as IEngine; } return new WaterMoonEngine(config); }
public WebAppTypeFinder(WaterMoonConfig config) { this._ensureBinFolderAssembliesLoaded = config.DynamicDiscovery; }