Мы внедрили следующий код 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));
}
Спасибо.