Ejemplo n.º 1
0
        public void Execute(IServiceProvider serviceProvider)
        {
            IKernel services = _fakeServices;

            //Fake services were not provided so add actual implemnetations
            if (services == null)
            {
                services = new StandardKernel();
                //Add mockable services here
            }

            //No need to mock these since they are taken care by the mock framework
            services.AddLogging()
            .AddCoreServices()
            .AddPluginServices(serviceProvider)
            .AddPluginPipelineServices();

            services.Bind <ISettingsProvider>().To <TSettingsProvider>().InTransientScope();

            Configure(services);

            _setupMockServices?.Invoke(_fakeServices);

            IPluginExecutionContextAccessor executionContextAccessor = services.Get <IPluginExecutionContextAccessor>();

            try
            {
                PluginExecutionContextAccessor.ValidateExecution(executionContextAccessor, GetType());
                Execute(services);
            }
            catch (Exception ex)
            {
                OnError(ex, services);
            }
        }
Ejemplo n.º 2
0
        public static IKernel AddPluginServices(this IKernel services, IServiceProvider serviceProvider)
        {
            Guard.That(() => serviceProvider).IsNotNull();
            Guard.That(() => services).IsNotNull();

            services.Bind <IServiceProvider>().ToConstant(serviceProvider).InSingletonScope();

            IPluginExecutionContext executionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            services.Bind <IPluginExecutionContext>().ToConstant(executionContext).InTransientScope();

            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            services.Bind <ITracingService>().ToConstant(tracingService).InTransientScope();

            IOrganizationServiceFactory organizationServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

            services.Bind <IOrganizationServiceFactory>().ToConstant(organizationServiceFactory).InTransientScope();

            services.Bind <IOrganizationService>().ToMethod(context =>
            {
                IOrganizationServiceFactory serviceFactory = context.Kernel.Get <IOrganizationServiceFactory>();
                return(serviceFactory.CreateOrganizationService(null));
            });

            services.Bind <IPluginExecutionContextAccessor>().To <PluginExecutionContextAccessor>().InTransientScope();

            services.Bind <User>().ToMethod(context =>
            {
                IPluginExecutionContextAccessor executionContextAccessor = context.Kernel.Get <IPluginExecutionContextAccessor>();
                return(executionContextAccessor.User);
            });

            return(services);
        }
Ejemplo n.º 3
0
 public SampleEntityPipelineService(IPluginExecutionContextAccessor executionContextAccessor, ILogger logger,
                                    IOrganizationService organizationService, ISettingsProvider settingsProvider, ISomeService someService) :
     base(executionContextAccessor, logger)
 {
     _organizationService = organizationService;
     _settingsProvider    = settingsProvider;
     _someService         = someService;
 }
        public static void ValidateExecution(IPluginExecutionContextAccessor executionContextAccessor, Type implementationType)
        {
            TargetEntityLogicalNameAttribute entityLogicalNameAttribute = Attribute.GetCustomAttribute(implementationType, typeof(TargetEntityLogicalNameAttribute)) as TargetEntityLogicalNameAttribute;

            Guard.That(() => entityLogicalNameAttribute).IsNotNull();

            if (entityLogicalNameAttribute != null && entityLogicalNameAttribute.TargetEntityLogicalName != executionContextAccessor.Target.EntityLogicalName)
            {
                throw new InvalidPluginExecutionException(OperationStatus.Failed, $"Expected target entity was {entityLogicalNameAttribute.TargetEntityLogicalName}, but got {executionContextAccessor.Target.EntityLogicalName}");
            }

            if (Attribute.GetCustomAttribute(implementationType, typeof(MessagesAttribute)) is MessagesAttribute messageAttribute)
            {
                if (messageAttribute.Messages.All(e => e != executionContextAccessor.MessageName))
                {
                    throw new InvalidPluginExecutionException(OperationStatus.Failed, $"Expected message not registered for this plugin, got {executionContextAccessor.MessageName}");
                }
            }
        }
Ejemplo n.º 5
0
        public virtual void OnError(Exception ex, IKernel services)
        {
            IPluginExecutionContextAccessor executionContextAccessor = services.Get <IPluginExecutionContextAccessor>();

            executionContextAccessor.HandleException(ex);
        }
Ejemplo n.º 6
0
 protected EntityPipelineService(IPluginExecutionContextAccessor executionContextAccessor, ILogger logger)
 {
     ExecutionContextAccessor = executionContextAccessor;
     _logger = logger;
 }