/// <summary> /// 根据配置文件的设置, 将构造原则(IPolicy)实例添加至Builder对象的构造原则链中. /// </summary> /// <param name="configSection">配置文件对象.</param> /// <param name="builder">Builder对象</param> private void applyConfigurationToBuilder(FactoryConfigurationSection configSection, IBuilder <BuilderStage> builder) { foreach (InterfaceElement interfaceEle in configSection.Interfaces) { foreach (InstanceElement instanceEle in interfaceEle.Instances) { // 添加接口与实现的Map关系!! TypeMappingPolicy tmp = new TypeMappingPolicy(instanceEle.Type, instanceEle.Name); builder.Policies.Set <ITypeMappingPolicy>(tmp, interfaceEle.Type, instanceEle.Name); // 添加接口实例的构造原则(IPolicy)(添加实例构造函数的参数列表). List <IParameter> paras = new List <IParameter>(); foreach (ConstructorParameterElement conParaEle in instanceEle.ConstructorParameters) { paras.Add(new ValueParameter(conParaEle.Type, conParaEle.GetParameterValue())); } ConstructorPolicy csp = new ConstructorPolicy(paras.ToArray()); builder.Policies.Set <ICreationPolicy>(csp, instanceEle.Type, instanceEle.Name); // 添加是否单件的构造原则(IPolicy). SingletonPolicy slp = new SingletonPolicy(instanceEle.IsSingleton); builder.Policies.Set <ISingletonPolicy>(slp, instanceEle.Type, instanceEle.Name); } } }
/// <summary> /// Constructor. /// </summary> public DependencyInjectionFactoryStrategy(FactoryConfigurationSection configSection) : base(configSection) { locator.Add(typeof(ILifetimeContainer), lifetimeContainer); builder = new Builder(); this.applyConfigurationToBuilder(configSection, this.builder); }
/// <summary> /// Static constructor. /// </summary> static CommonLibraryFactory() { // Get configuration section. configSection = (FactoryConfigurationSection)ConfigurationManager.GetSection(sectionName); // Create a factory strategy. factoryStrategy = GetFactoryStrategy(configSection); }
/// <summary> /// Constructor. /// </summary> /// <param name="configElement"></param> public HardcodeFactoryStrategy(FactoryConfigurationSection configSection) : base(configSection) { }
/// <summary> /// Constructor. /// </summary> /// <param name="configElement"></param> public ReflectionFactoryStrategy(FactoryConfigurationSection configSection) : base(configSection) { }
/// <summary> /// Get a factory strategy instance. /// </summary> /// <param name="configSection"></param> /// <returns>a factory strategy instance.</returns> public static IFactoryStrategy GetFactoryStrategy(FactoryConfigurationSection configSection) { object obj = Activator.CreateInstance(configSection.StrategyType, new object[] { configSection }); return(obj as IFactoryStrategy); }
/// <summary> /// Protected constructor. /// </summary> /// <param name="configElement"></param> protected AbstractFactoryStrategy(FactoryConfigurationSection configSection) { this.configSection = configSection; }