/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="factory"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Func <object> factory, LifestyleFlags lifestyleType) { Guard.NotNull(contract, "contract"); Guard.NotNull(factory, "factory"); contracts.Add(contract); ContractService.GetContracts(contract, contracts); Id = id; if (string.IsNullOrEmpty(id)) { Id = factory.ToString() + "/" + contract.FullName; } if (contract.IsOpenGenericType()) { Lifestyle = LifestyleType.GetGenericLifestyle(lifestyleType); } else { Lifestyle = LifestyleType.GetLifestyle(lifestyleType); } Activator = ActivatorType.Factory; Factory = factory; Name = Id; }
internal static LifestyleFlags GetLifestyle(LifestyleFlags lifestyle) { if (lifestyle == LifestyleFlags.GenericSingleton) return LifestyleFlags.Singleton; if (lifestyle == LifestyleFlags.GenericTransient) return LifestyleFlags.Transient; if (lifestyle == LifestyleFlags.GenericThread) return LifestyleFlags.Thread; return lifestyle; }
/// <inheritdoc/> public ILifestyleManager Create(LifestyleFlags type) { switch (type) { case LifestyleFlags.Singleton: return new SingletontLifestyleManager(); case LifestyleFlags.Transient: return new TransientLifestyleManager(); case LifestyleFlags.Thread: return new ThreadLifestyleManager(); case LifestyleFlags.GenericSingleton: return new GenericSingletonLifestyleManager(); case LifestyleFlags.GenericTransient: return new GenericTransientLifestyleManager(); default: return new GenericThreadLifestyleManager(); } }
internal static LifestyleFlags GetLifestyle(LifestyleFlags lifestyle) { if (lifestyle == LifestyleFlags.GenericSingleton) { return(LifestyleFlags.Singleton); } if (lifestyle == LifestyleFlags.GenericTransient) { return(LifestyleFlags.Transient); } if (lifestyle == LifestyleFlags.GenericThread) { return(LifestyleFlags.Thread); } return(lifestyle); }
/// <inheritdoc/> public ILifestyleManager Create(LifestyleFlags type) { switch (type) { case LifestyleFlags.Singleton: return(new SingletontLifestyleManager()); case LifestyleFlags.Transient: return(new TransientLifestyleManager()); case LifestyleFlags.Thread: return(new ThreadLifestyleManager()); case LifestyleFlags.GenericSingleton: return(new GenericSingletonLifestyleManager()); case LifestyleFlags.GenericTransient: return(new GenericTransientLifestyleManager()); default: return(new GenericThreadLifestyleManager()); } }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="factory"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Func<object> factory, LifestyleFlags lifestyleType) { Guard.NotNull(contract,"contract"); Guard.NotNull(factory,"factory"); contracts.Add(contract); ContractService.GetContracts(contract, contracts); Id = id; if (string.IsNullOrEmpty(id)) Id = factory.ToString() + "/" + contract.FullName; if (contract.IsOpenGenericType()) Lifestyle = LifestyleType.GetGenericLifestyle(lifestyleType); else Lifestyle = LifestyleType.GetLifestyle(lifestyleType); Activator = ActivatorType.Factory; Factory = factory; Name = Id; }
internal static IComponentInfo CreateComponentInfo(string id, Type contract, Type implementation, string activator, LifestyleFlags lifestyleType) { var info = new ComponentInfo(id, contract, implementation, activator, lifestyleType); return(info); }
static LifestyleType() { Default = LifestyleFlags.Singleton; }
IComponentExpression IComponentExpression.Lifestyle(LifestyleFlags lifestyle) { Lifestyle = lifestyle; return(this); }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="implementation"></param> /// <param name="activator"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Type implementation, string activator, LifestyleFlags lifestyleType) { Guard.NotNull(implementation, "implementation"); if (contract == null) { contract = implementation; } if (!contract.IsGenericType || contract.IsCloseGenericType()) { Guard.IsTrue(contract.IsAssignableFrom(implementation)); } contracts.Add(contract); ContractService.GetContracts(implementation, contracts); Id = id; if (string.IsNullOrEmpty(id)) { Id = implementation.FullName; } if (contract.IsOpenGenericType()) { Lifestyle = LifestyleType.GetGenericLifestyle(lifestyleType); } else { Lifestyle = LifestyleType.GetLifestyle(lifestyleType); } Activator = activator; if (string.IsNullOrEmpty(activator)) { Activator = ActivatorType.Default; } Name = Id; Implementation = implementation; if (implementation != null) { Name = implementation.FullName + "/" + contract.FullName; } }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="implementation"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Type implementation, LifestyleFlags lifestyleType) : this(id, contract, implementation, null, lifestyleType) { }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="implementation"></param> /// <param name="activator"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Type implementation, string activator, LifestyleFlags lifestyleType) { Guard.NotNull(implementation, "implementation"); if (contract == null) contract = implementation; if (!contract.IsGenericType || contract.IsCloseGenericType()) Guard.IsTrue(contract.IsAssignableFrom(implementation)); contracts.Add(contract); ContractService.GetContracts(implementation,contracts); Id = id; if (string.IsNullOrEmpty(id)) Id = implementation.FullName; if (contract.IsOpenGenericType()) Lifestyle = LifestyleType.GetGenericLifestyle(lifestyleType); else Lifestyle = LifestyleType.GetLifestyle(lifestyleType); Activator = activator; if (string.IsNullOrEmpty(activator)) Activator = ActivatorType.Default; Name = Id; Implementation = implementation; if (implementation != null) { Name = implementation.FullName + "/" + contract.FullName; } }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="contract"></param> /// <param name="implementation"></param> /// <param name="lifestyleType"></param> public ComponentInfo(string id, Type contract, Type implementation, LifestyleFlags lifestyleType):this(id,contract,implementation,null,lifestyleType){}
/// <summary> /// 通过契约类型,组件类型,组件Id以及生命周期类型来注册组件 /// </summary> /// <typeparam name="TContract"></typeparam> /// <typeparam name="TComponent"></typeparam> /// <param name="registry"></param> /// <param name="id"></param> /// <param name="lifestyle"></param> /// <returns></returns> public static IServiceRegistry Register <TContract, TComponent>(this IServiceRegistry registry, string id, LifestyleFlags lifestyle) where TComponent : TContract { if (registry == null) { throw new ArgumentNullException("registry"); } return(registry.Register(new ComponentInfo(id, typeof(TContract), typeof(TComponent), ActivatorType.Default, lifestyle))); }