Пример #1
0
        /// <summary>
        /// Adds the interception policy.
        /// </summary>
        /// <param name="builder">The <see cref="InterceptionBuilder"/> to perform interception service registration.</param>
        /// <param name="configure">The <see cref="Action{IInterceptionPolicyBuilder}"/> used to build interception policy.</param>
        /// <returns>The current <see cref="InterceptionBuilder"/>. </returns>
        public static InterceptionBuilder AddPolicy(this InterceptionBuilder builder, Action <IInterceptionPolicyBuilder> configure)
        {
            Guard.ArgumentNotNull(builder, nameof(builder));
            Guard.ArgumentNotNull(configure, nameof(configure));

            var serviceProvider     = builder.Services.BuildServiceProvider();
            var registrationBuilder = new InterceptionPolicyBuilder(serviceProvider);

            configure.Invoke(registrationBuilder);
            var resolver = new PolicyInterceptorProviderResolver(registrationBuilder.Build());

            builder.InterceptorProviderResolvers.Add(nameof(PolicyInterceptorProviderResolver), resolver);
            return(builder);
        }
Пример #2
0
 // ©w¸q ÄdºIµ¦²¤
 static void ConfigureDora(InterceptionBuilder interceptionBuilder)
 {
     interceptionBuilder
     .AddPolicy
     (
         policyBuilder => policyBuilder
         .For <LogInterceptorAttribute>
         (
             order: 1,
             builder => builder.To <CustomerService>(target => target.IncludeMethod(service => service.GetAllAsync()))
             .To <CustomerRepository>(target => target.IncludeMethod(repository => repository.GetAllAsync()))
         )
         .For <LogAttribute>
         (
             order: 2,
             builder => builder.To <CustomerService>(target => target.IncludeMethod(service => service.GetAllAsync()))
             .To <CustomerRepository>(target => target.IncludeMethod(repository => repository.GetAllAsync()))
         )
     );
 }
Пример #3
0
        /// <summary>
        /// Adds the policy.
        /// </summary>
        /// <param name="builder">The <see cref="InterceptionBuilder"/>.</param>
        /// <param name="fileName">The name of interception policy file.</param>
        /// <param name="configure">The <see cref="Action{PolicyFileBuilder}"/> to provide <see cref="ScriptOptions"/>.</param>
        /// <returns>The <see cref="InterceptionBuilder"/>.</returns>
        public static InterceptionBuilder AddPolicy(this InterceptionBuilder builder, string fileName, Action <PolicyFileBuilder> configure = null)
        {
            Guard.ArgumentNotNull(builder, nameof(builder));
            Guard.ArgumentNotNullOrWhiteSpace(fileName, nameof(fileName));
            var serviceProvider = builder.Services.BuildServiceProvider();
            var fileBuilder     = new PolicyFileBuilder()
                                  .AddImports("Dora.Interception", "System")
                                  .AddReferences(typeof(InterceptionPolicyBuilder).Assembly);

            configure?.Invoke(fileBuilder);
            var options = ScriptOptions.Default
                          .WithReferences(fileBuilder.References)
                          .WithImports(fileBuilder.Imports);
            var policyBuilder = new InterceptionPolicyBuilder(serviceProvider);
            var contents      = fileBuilder.ReadAllText(fileName);
            var script        = CSharpScript
                                .Create($"var policyBuilder = Builder;{Environment.NewLine}{contents}", options, typeof(Globals));

            script.RunAsync(new Globals(policyBuilder)).Wait();
            var resolver = new PolicyInterceptorProviderResolver(policyBuilder.Build());

            builder.InterceptorProviderResolvers.Add(nameof(PolicyInterceptorProviderResolver), resolver);
            return(builder);
        }
Пример #4
0
 static void Configure(InterceptionBuilder interceptionBuilder)
 {
     interceptionBuilder.AddPolicy("Interception.dora", script => script
                                   .AddReferences(Assembly.GetExecutingAssembly())
                                   .AddImports("App"));
 }
 public static InterceptionBuilder RegisterInterceptors(this InterceptionBuilder builder, Action <ConditionalInterceptorProviderOptions> setup)
 {
     builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IInterceptorProvider, ConditionalInterceptorProvider>());
     builder.Services.Configure(setup);
     return(builder);
 }
Пример #6
0
 static void Configure(InterceptionBuilder interceptionBuilder)
 {
     interceptionBuilder.AddPolicy(policyBuilder => policyBuilder
                                   .For <CacheReturnValueAttribute>(order: 1, cache => cache
                                                                    .To <SystemClock>(target => target
                                                                                      .IncludeMethod(clock => clock.GetCurrentTime(default)))));