public interface IDALManager { IIteminfo CreateIteminfo(); IIteminfoList CreateIteminfoList(); IProduct CreateProduct(); IProductList CreateProductList(); }
我们在Exam.DAL.SQLServer、Exam.DAL.Oracle中分别实现业务接口和IDALManager接口:
public class DALManager : IDALManager { public IIteminfo CreateIteminfo() { return new Iteminfo(); } public IIteminfoList CreateIteminfoList() { return new IteminfoList(); } public IProduct CreateProduct() { return new Product(); } public IProductList CreateProductList() { return new ProductList(); }
}
public class DALHelper { public DALHelper() { } public static IDALManager DALManager { get { return ContextHelper.GetContext().Container.GetComponentInstance("EAS.Exam.DAL") as IDALManager; } } }
<object name="EAS.Exam.DAL" assembly="EAS.Exam.DAL.SQLServer" type="EAS.Exam.DAL.SQLServer.DALManager" LifestyleType="Singleton" />
<object name="MasterDbConnection" assembly="EAS.Data" type="EAS.Data.Access.OleDbConnection" LifestyleType="Singleton"> <property name="ConnectionString" type="string" value="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=sa;Initial Catalog=eas;Data Source=vm2003" /> </object> <object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton"> <property name="DbConnection" type="object" value="MasterDbConnection" /> </object> <object name="CacheAccessor" assembly="EAS.Data" type="EAS.Data.ORM.CacheAccessor" LifestyleType="Singleton"> </object> <object name="MasterDataAccessor" assembly="EAS.Data" type="EAS.Data.Access.OleDbAccessor" LifestyleType="Singleton"> <property name="Connection" type="object" value="MasterDbConnection" /> </object> <object name="MasterRMIAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.RMIAccessor" LifestyleType="Singleton"> <constructor-arg index="0" type="string" value="http://demo.smarteas.net/activexform/Distributed/RMIService.asmx" /> </object>
/// <summary> /// 枚举LifestyleType 组件的生存方式,即组件以何种生存周期在容器中生存。 /// </summary> public enum LifestyleType { /// <summary> /// Undefined,没有定义生存周期,即以默认生存周期(Transient)。 /// </summary> Undefined = 0x00000000, /// <summary> /// Singleton,组件一旦自在,则在所有的客商端中共享。 /// </summary> Singleton = 0x00000001, /// <summary> /// Thread,每一个客户端线程拥有单独的一个实例。 /// </summary> Thread = 0x00000002, /// <summary> /// Transient,组件在使用时创建、使用后销毁。 /// </summary> Transient = 0x00000004, /// <summary> /// Pooled,组件池,初始时分配一定数量的组件,客户请求时,分配一个空闲组件,用户使用完后交由池中。 /// </summary> Pooled = 0x00000008 }
IContainer /// <summary> /// 的组件容器,组件容器管理组件的生存,也是对外提供的一个接口。 /// </summary> public interface IContainer : IDisposable { /// <summary> /// 根据组件组件key向容器注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> void AddComponent(string componentKey); /// <summary> /// 根据组件组件key及组件实现类型向容器注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="componentImplementation"></param> void AddComponent(string componentKey, Type componentImplementation); /// <summary> /// 根据组件key、接口类型及实现类型中注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="serviceType">组件接口类型。</param> /// <param name="componentImplementation">组件实现类型。</param> void AddComponent(string componentKey, Type serviceType, Type componentImplementation); /// <summary> /// 根据组件实现类型及组件接口类型向容器注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="componentImplementation">组件实现类型。</param> /// <param name="serviceType">组件接口类型。</param> /// <param name="lifestyleType"> 组件生命周期方式。</param> /// <param name="lifestyleParameters"> 组件生命周期相关参数,参数为一个字符串,其中由“:”分隔。</param> void AddComponent(string componentKey,Type serviceType,Type componentImplementation,Lifecycle.LifestyleType lifestyleType,string lifestyleParameters); /// <summary> /// 根据组件实现类型向容器注册组件实现。 /// </summary> /// <param name="componentImplementation">组件实现类型。</param> void AddComponent(Type componentImplementation); /// <summary> /// 根据组件实现类型及组件接口类型向容器注册组件实现。 /// </summary> /// <param name="componentImplementation">组件实现类型。</param> /// <param name="serviceType">组件接口类型。</param> void AddComponent(Type componentImplementation,Type serviceType); /// <summary> /// 根据组件实例向组件容器中注册组件。 /// </summary> /// <param name="componentInstance">组件实例。</param> void AddComponentInstance(object componentInstance); /// <summary> /// 根据组件key及组件实现向组件容器中注册组件。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="componentInstance">组件实例。</param> void AddComponentInstance(string componentKey, object componentInstance); /// <summary> /// 根据组件key、接口类型及组件实例向组件容器中注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="serviceType">组件接口类型。</param> /// <param name="componentInstance">组件实例。</param> void AddComponentInstance(string componentKey, Type serviceType, object componentInstance); /// <summary> /// 根据组件key、接口类型、组件实例及组件生存类型向组件容器中注册组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="serviceType">组件接口类型。</param> /// <param name="componentInstance">组件实例。</param> /// <param name="lifestyleType"> 组件生命周期方式。</param> /// <param name="lifestyleParameters"> 组件生命周期相关参数,参数为一个字符串,其中由“:”分隔。</param> void AddComponentInstance(string componentKey, Type serviceType, object componentInstance,Lifecycle.LifestyleType lifestyleType,string lifestyleParameters); /// <summary> /// 根据组件key从组件容器中移除组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <returns></returns> void RemoveComponent(string componentKey); /// <summary> /// 根据组件实例从组件容器中移除组件实现。 /// </summary> /// <param name="componentInstance">组件实例。</param> /// <returns></returns> void RemoveComponent(object componentInstance); /// <summary> /// 根据组件key及组件实例从组件容器中移除组件实现。 /// </summary> /// <param name="componentKey">组件key。</param> /// <param name="componentInstance">组件实例。</param> /// <returns></returns> void RemoveComponent(string componentKey, object componentInstance); /// <summary> /// 根据组件key判断组件容器是否含指定key的组件实例。 /// </summary> /// <param name="componentKey">组件key。</param> /// <returns></returns> bool HasComponent(string componentKey ); /// <summary> /// 根据组件实例判断组件容器是否含指定key的组件实例。 /// </summary> /// <param name="componentInstance">组件实例。</param> /// <returns></returns> bool HasComponent(object componentInstance ); /// <summary> /// 根据组件接口类型判断组件容器是否含指定key的组件实例。 /// </summary> /// <param name="serviceType">组件接口类型。</param> /// <returns></returns> bool HasComponent( Type serviceType ); /// <summary> /// 组件索引器,获取指定Key值的组件实例。 /// </summary> object this[string key] { get; } /// <summary> /// 组件索引器,获取指定接口类型的组件实例。 /// </summary> object this[Type key] { get; } /// <summary> /// 根据组件实例从组件容器中释放组件实例。 /// </summary> /// <param name="componentInstance">组件实例。</param> void ReleaseComponent(object componentInstance ); /// <summary> /// 根据组件Key从组件容器中释放组件实例。 /// </summary> /// <param name="componentKey">组件Key。</param> void ReleaseComponent( string componentKey ); /// <summary> /// 根据组件的key取得组件实例。 /// </summary> /// <param name="componentKey">组件的key。</param> /// <returns>组件实例。</returns> object GetComponentInstance(string componentKey); /// <summary> /// 根据组件的类型取得组件实例。 /// </summary> /// <param name="componentType">组件类型。</param> /// <returns>组件实例。</returns> object GetComponentInstance(Type componentType); /// <summary> /// 根据组件服务类型取得组件实例。 /// </summary> /// <param name="serviceType">组件接口类型。</param> /// <returns>组件实例。</returns> object GetServiceComponentInstance(Type serviceType); /// <summary> /// 获取一个值,批示容器中所有的组件列表。 /// </summary> IDictionary<string, object> ComponentInstances { get; } /// <summary> /// 根据组件类型取得组件实例列表。 /// </summary> /// <param name="serviceType">组件接口类型。</param> /// <returns>组件实例列表。</returns> IList GetComponentInstances(Type serviceType); /// <summary> /// 获取一个值,该值批示组件容器中的所有组件适配器列表。 /// </summary> IDictionary<string, IComponentAdapter> ComponentAdapters { get; } /// <summary> /// 根据组件key取得与组件相关的组件适配器。 /// </summary> /// <param name="componentKey">组件的key。</param> /// <returns>指定组件的组件适配器。</returns> IComponentAdapter GetComponentAdapter(string componentKey); /// <summary> /// 根据组件类型取得与组件相关的组件适配器。 /// </summary> /// <param name="componentType">组件类型。</param> /// <returns>指定组件类型的组件适配器。</returns> IComponentAdapter GetComponentAdapter(Type componentType); /// <summary> /// 根据组件类类型获取组件适配器列表。 /// </summary> /// <param name="serviceType">组件接口类型。</param> /// <returns>指定组件类型的组件适配器列表。</returns> IDictionary<string, IComponentAdapter> GetComponentAdapters(Type serviceType); /// <summary> /// 获取一个值,该值批示组件容器中的所有组件生命周期管理器列表。 /// </summary> IDictionary<string, ILifecycleManager> LifecycleManagers { get;} /// <summary> /// 根据组件key取得与组件相关的组件生命周期管理器。 /// </summary> /// <param name="componentKey"> 组件的键。</param> /// <returns>指定组件键的生命周期管理器。</returns> Lifecycle.ILifecycleManager GetLifecycleManager(string componentKey); /// <summary> /// 根据组件实现类型取得与组件相关的组件生命周期管理器。 /// </summary> /// <param name="componentType"> 组件的实现类型。</param> /// <returns>指定组件类型的生命周期管理器。</returns> Lifecycle.ILifecycleManager GetLifecycleManager(System.Type componentType); /// <summary> /// 根据组件接口类型取得与组件相关的组件生命周期管理器列表。 /// </summary> /// <param name="serviceType"> 组件的接口类型。</param> /// <returns>指定组件类型的生命周期管理器。</returns> IDictionary<string, ILifecycleManager> GetLifecycleManagers(System.Type serviceType); }
IContext public interface IContext { /// <summary> /// 组件容器,获取系统上下文中的组件容器。 /// </summary> EAS.Objects.IContainer Container { get;} /// <summary> /// 判定指定名称的组件是生存周期是否为Singleton模式。 /// </summary> /// <param name="name">组件的名称。</param> /// <returns>组件的生存周期是否为Singleton模式,是则返回true,否则返回false。</returns> bool IsSingleton(string name); /// <summary> /// 根据组件名称获取指定组件的生命周期类型。 /// </summary> /// <param name="name">组件的名称。</param> /// <returns>组件的生命周期类型。</returns> Objects.Lifecycle.LifestyleType GetLifestyleType(string name); /// <summary> /// 上下文中是否包含指定名称的组件实例。 /// </summary> /// <param name="name">组件的名称。</param> /// <returns>是否包含特定的组件。包含则返回true,否则返回false。</returns> bool ContainsObject(string name); /// <summary> /// 上下文中是否包含指定类型的组件实例。 /// </summary> /// <param name="type">组件接口类型。</param> /// <returns>是否包含特定的组件。包含则返回true,否则返回false。</returns> bool ContainsObject(System.Type type); /// <summary> /// 索引器,根据名称获取指定的组件实例。 /// </summary> object this[string name] { get; } /// <summary> /// 根据组件的名称返回一个组件实例。 /// </summary> /// <param name="name">组件的名称。</param> /// <returns>组件的实例。</returns> object GetObject(string name); /// <summary> /// 根据组件的类型返回一个组件实例。 /// </summary> /// <param name="type">组件的类型。</param> /// <returns>组件的实例。</returns> object GetObject(System.Type type); /// <summary> /// 根据组件的名称返回组件实例的类型。 /// </summary> /// <param name="name">组件名称。</param> /// <returns>组件类型。</returns> Type GetType(string name); /// <summary> /// 在容器中配置组件。 /// </summary> /// <param name="target">要配置的组件目标对象。</param> void ConfigureObject(object target); /// <summary> /// 在容器中配置组件。 /// </summary> /// <param name="name">组件名称。</param> void ConfigureObject(string name); /// <summary> /// 在容器中配置组件。 /// </summary> /// <param name="target">要配置的组件目标对象。</param> /// <param name="name">组件名称。</param> void ConfigureObject(object target, string name); /// <summary> /// 在容器中配置组件。 /// </summary> /// <param name="type">组件类型。</param> void ConfigureObject(System.Type type); /// <summary> /// 在容器中配置组件。 /// </summary> /// <param name="type">组件类型</param> /// <param name="name">组件名称。</param> void ConfigureObject(System.Type type,string name); }
0人
|
了这篇文章 |