我希望能够在我的web.config中定义我的对象将用于获取数据(变量)的连接类型(来自xml或数据库)。
我虽然关于使用策略模式,但我有点担心需要在某处编写类的名称,这是我不想要的。
有什么建议吗?
我有 IContext 界面。 它在 ContextXML 和 ContextDB 中实现。
我的课程上下文有一个 IContext 成员(名为 _context )。
上下文类读取(通过 ContextConfiguration ) app.config 。
我希望 _context 能够成为 ContextXML 或 ContextDB ...或 ContextJSon 或任何其他将实现 IContext 的新类。
答案 0 :(得分:0)
您是否考虑过创建ContextManager
类并采用“按惯例配置”?
我会做的是将成员getName
添加到您的IContext
界面 - 这只会为每个实现返回一个很好的人类可读字符串 - 就像“ContextXML”一样简单适用于您的ContextXML
课程。
当您的ContextManager
(可能是Singleton,BTW)启动时,它会扫描已知目录中的IContext
实现,通过反射实例化它们(或其他一些机制,我不熟悉VB .Net但我确定有一种方法),并把它们放在一个集合中。
现在,当您构建Context
个对象时,您可以向ContextManager
提出合适的IContext
- 明确地[例如} getIContextByName("ContextDB")
]或者更简单的方法,只返回由其他机制配置的任何东西 - 即一套类似的方法:
getPossibleIContextImplementationNames()
setCurrentIContextImplementation({name})
getCurrentIContext()
除此之外,你是否坚持使用这个命名?因为拥有{em>使用的Context
对象IContext
似乎有点不寻常。如果您的IContext
实现实际上用于从某个位置检索数据,为什么不调用界面IDAO
或IDataAccessor
?