protected override void Load(ContainerBuilder builder) { builder.RegisterType <EventPublisher>().As <IEventPublisher>().SingleInstance(); builder.RegisterGeneric(typeof(DefaultConsumerFactory <>)).As(typeof(IConsumerFactory <>)).InstancePerDependency(); // Register event consumers var consumerTypes = _typeFinder.FindClassesOfType(typeof(IConsumer <>)); foreach (var consumerType in consumerTypes) { Type[] implementedInterfaces = consumerType.FindInterfaces(IsConsumerInterface, typeof(IConsumer <>)); var registration = builder.RegisterType(consumerType).As(implementedInterfaces); var pluginDescriptor = _pluginFinder.GetPluginDescriptorByAssembly(consumerType.Assembly); var isActive = PluginManager.IsActivePluginAssembly(consumerType.Assembly); var shouldExecuteAsync = consumerType.GetAttribute <AsyncConsumerAttribute>(false) != null; registration.WithMetadata <EventConsumerMetadata>(m => { m.For(em => em.IsActive, isActive); m.For(em => em.ExecuteAsync, shouldExecuteAsync); m.For(em => em.PluginDescriptor, pluginDescriptor); }); if (!shouldExecuteAsync) { registration.InstancePerRequest(); } } }
protected override void Load(ContainerBuilder builder) { builder.RegisterType <ProviderManager>().As <IProviderManager>().InstancePerRequest(); if (!DataSettings.DatabaseIsInstalled()) { return; } var providerTypes = _typeFinder.FindClassesOfType <IProvider>(ignoreInactivePlugins: true).ToList(); foreach (var type in providerTypes) { var pluginDescriptor = _pluginFinder.GetPluginDescriptorByAssembly(type.Assembly); var groupName = ProviderTypeToKnownGroupName(type); var systemName = GetSystemName(type, pluginDescriptor); var friendlyName = GetFriendlyName(type, pluginDescriptor); var displayOrder = GetDisplayOrder(type, pluginDescriptor); var dependentWidgets = GetDependentWidgets(type); var resPattern = (pluginDescriptor != null ? "Plugins" : "Providers") + ".{1}.{0}"; // e.g. Plugins.FriendlyName.MySystemName var settingPattern = (pluginDescriptor != null ? "Plugins" : "Providers") + ".{0}.{1}"; // e.g. Plugins.MySystemName.DisplayOrder var isConfigurable = typeof(IConfigurable).IsAssignableFrom(type); var isEditable = typeof(IUserEditable).IsAssignableFrom(type); var isHidden = GetIsHidden(type); var exportFeature = GetExportFeature(type); var registration = builder.RegisterType(type).Named <IProvider>(systemName).InstancePerRequest().PropertiesAutowired(PropertyWiringOptions.None); registration.WithMetadata <ProviderMetadata>(m => { m.For(em => em.PluginDescriptor, pluginDescriptor); m.For(em => em.GroupName, groupName); m.For(em => em.SystemName, systemName); m.For(em => em.ResourceKeyPattern, resPattern); m.For(em => em.SettingKeyPattern, settingPattern); m.For(em => em.FriendlyName, friendlyName.Item1); m.For(em => em.Description, friendlyName.Item2); m.For(em => em.DisplayOrder, displayOrder); m.For(em => em.DependentWidgets, dependentWidgets); m.For(em => em.IsConfigurable, isConfigurable); m.For(em => em.IsEditable, isEditable); m.For(em => em.IsHidden, isHidden); m.For(em => em.ExportFeatures, exportFeature); }); // register specific provider type RegisterAsSpecificProvider <ITaxProvider>(type, systemName, registration); RegisterAsSpecificProvider <IDiscountRequirementRule>(type, systemName, registration); RegisterAsSpecificProvider <IExchangeRateProvider>(type, systemName, registration); RegisterAsSpecificProvider <IShippingRateComputationMethod>(type, systemName, registration); RegisterAsSpecificProvider <IWidget>(type, systemName, registration); RegisterAsSpecificProvider <IExternalAuthenticationMethod>(type, systemName, registration); RegisterAsSpecificProvider <IPaymentMethod>(type, systemName, registration); RegisterAsSpecificProvider <IExportProvider>(type, systemName, registration); } }