Autofa c Performance Tuning - PullRequest
       4

Autofa c Performance Tuning

1 голос
/ 07 января 2020

Мы внедрили следующий код Autofa c, используя SingleInstance в коде c#. Мы нашли, что для инициации конструкторов для всех сервисов каждый раз, когда мы вызываем определенные сервисы, требуется от 3 до 4 секунд. Ниже приведена следующая реализация кода.

    private static void RegisterDependency(HttpConfiguration config)
    {
        Log.Trace("Registering dependencies");
        var builder = new ContainerBuilder();
        HttpContextBase httpContextBase = new HttpContextWrapper(HttpContext.Current);
        var configService = new ConfigurationService(httpContextBase, new CacheWrapper());
        var stubModeValue = configService.GetResourcePreferenceValueByKeyName("stubMode", "N");
        var isStubMode = "Y".Equals(stubModeValue, StringComparison.OrdinalIgnoreCase);
        builder.RegisterAssemblyTypes(typeof(ClientService).Assembly).Where(x => x.isClass && x.isPublic && !x.isAbstract)
            .Where(x => isStubMode = x.Name.EndsWith("stub").AsImplementedInterface();
        RegisterServiceProxy<ExternalService1>(builder);
        RegisterServiceProxy<ExternalService2>(builder);
        RegisterServiceProxy<ExternalService3>(builder);
        builder.Register<IUserProfile>(x => OwnerIdentityAndRoleProfile.Current).InstancePerLifeTimeScope();
        builder.Register<IConfigurationService>(c => new ConfigurationService(httpContextBase, new CacheWrapper()).InstancePerLifeTimeScope;
        builder.RegisterType<ServiceProxyProvider>().SingleInstance();
        builder.RegisterType<wsProfileWrapper>() As <wsProfileWrapper>();

        var container = builder.build();
        ServiceProxyProvider = container.Resolve<serviceProxyProvider>();

        config.DependencyResolver = new AutofacWebAPIDependencyResolver(container);
        Log.Trace("Completed Registering dependencies");
    }


    static void RegisterServiceProxy<T> (ContainerBuilder builder) where T:class
    {
        builder.Register(_ => _serviceProxyProvider.CreateServiceProxyInstance<T>()).InstancePerRequest()
            .OnRelease(x => _serviceProxyProvider.Dispose(x));
    }

Спасибо.

...