如何通过web.config确定对象行为?

时间:2011-11-10 16:34:02

标签: vb.net design-patterns web-config

我希望能够在我的web.config中定义我的对象将用于获取数据(变量)的连接类型(来自xml或数据库)。

我虽然关于使用策略模式,但我有点担心需要在某处编写类的名称,这是我不想要的。

有什么建议吗?

附加信息

我有 IContext 界面。 它在 ContextXML ContextDB 中实现。

我的课程上下文有一个 IContext 成员(名为 _context )。

上下文类读取(通过 ContextConfiguration app.config

我希望 _context 能够成为 ContextXML ContextDB ...或 ContextJSon 或任何其他将实现 IContext 的新类。

1 个答案:

答案 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实现实际上用于从某个位置检索数据,为什么不调用界面IDAOIDataAccessor