/// <summary> /// Creates an implementation of /// <see cref = "ILifestyleManager" /> /// based /// on /// <see cref = "LifestyleType" /> /// and invokes /// <see cref = "ILifestyleManager.Init" /> /// to initialize the newly created manager. /// </summary> /// <param name = "activator"></param> /// <returns></returns> protected virtual ILifestyleManager CreateLifestyleManager(IComponentActivator activator) { ILifestyleManager manager = null; LifestyleType type = ComponentModel.LifestyleType; switch (type) { case LifestyleType.Thread: #if (!SILVERLIGHT) manager = new PerThreadLifestyleManager(); #else manager = new PerThreadThreadStaticLifestyleManager(); #endif break; case LifestyleType.Transient: manager = new TransientLifestyleManager(); break; #if (!SILVERLIGHT) case LifestyleType.PerWebRequest: manager = new PerWebRequestLifestyleManager(); break; #endif case LifestyleType.Custom: manager = (ILifestyleManager)Activator.CreateInstance(ComponentModel.CustomLifestyle); break; case LifestyleType.Pooled: { int initial = ExtendedPropertiesConstants.Pool_Default_InitialPoolSize; int maxSize = ExtendedPropertiesConstants.Pool_Default_MaxPoolSize; if (ComponentModel.ExtendedProperties.Contains(ExtendedPropertiesConstants.Pool_InitialPoolSize)) initial = (int)ComponentModel.ExtendedProperties[ExtendedPropertiesConstants.Pool_InitialPoolSize]; if (ComponentModel.ExtendedProperties.Contains(ExtendedPropertiesConstants.Pool_MaxPoolSize)) maxSize = (int)ComponentModel.ExtendedProperties[ExtendedPropertiesConstants.Pool_MaxPoolSize]; manager = new PoolableLifestyleManager(initial, maxSize); } break; default: //this includes LifestyleType.Undefined, LifestyleType.Singleton and invalid values manager = new SingletonLifestyleManager(); break; } manager.Init(activator, Kernel, model); return manager; }
/// <summary> /// Creates an implementation of /// <see cref = "ILifestyleManager" /> /// based /// on /// <see cref = "LifestyleType" /> /// and invokes /// <see cref = "ILifestyleManager.Init" /> /// to initialize the newly created manager. /// </summary> /// <param name = "activator"></param> /// <returns></returns> protected virtual ILifestyleManager CreateLifestyleManager(IComponentActivator activator) { ILifestyleManager manager; var type = ComponentModel.LifestyleType; switch (type) { case LifestyleType.Scoped: var scopeManager = Kernel.GetSubSystem("scope") as IScopeManager; if (scopeManager == null) { throw new InvalidOperationException("Scope Subsystem not found. Did you forget to add it?"); } manager = new ScopedLifestyleManager(new CurrentScopeAccessor(scopeManager, ComponentModel)); break; case LifestyleType.Thread: #if SILVERLIGHT manager = new PerThreadThreadStaticLifestyleManager(); #else manager = new PerThreadLifestyleManager(); #endif break; case LifestyleType.Transient: manager = new TransientLifestyleManager(); break; #if (!SILVERLIGHT && !CLIENTPROFILE) case LifestyleType.PerWebRequest: manager = new PerWebRequestLifestyleManager(); break; #endif case LifestyleType.Custom: manager = ComponentModel.CustomLifestyle.CreateInstance<ILifestyleManager>(); break; case LifestyleType.Pooled: { var initial = ExtendedPropertiesConstants.Pool_Default_InitialPoolSize; var maxSize = ExtendedPropertiesConstants.Pool_Default_MaxPoolSize; if (ComponentModel.ExtendedProperties.Contains(ExtendedPropertiesConstants.Pool_InitialPoolSize)) { initial = (int)ComponentModel.ExtendedProperties[ExtendedPropertiesConstants.Pool_InitialPoolSize]; } if (ComponentModel.ExtendedProperties.Contains(ExtendedPropertiesConstants.Pool_MaxPoolSize)) { maxSize = (int)ComponentModel.ExtendedProperties[ExtendedPropertiesConstants.Pool_MaxPoolSize]; } manager = new PoolableLifestyleManager(initial, maxSize); } break; default: //this includes LifestyleType.Undefined, LifestyleType.Singleton and invalid values manager = new SingletonLifestyleManager(); break; } manager.Init(activator, Kernel, ComponentModel); return manager; }