Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }