首页 > 解决方案 > Autofac 性能调优

问题描述

我们在 c# 代码中使用 SingleInstance 实现了以下 Autofac 代码。我们发现每次调用特定服务时,为所有服务初始化构造函数大约需要 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));
    }

谢谢。

标签: autofac

解决方案


推荐阅读