【问题标题】:C# and try on namespaceC# 并尝试命名空间
【发布时间】:2011-09-07 13:08:12
【问题描述】:

我有一个程序可以做很多事情,其中​​之一是使用Oracle.DataAccess.Client; 连接到 Oracle 数据库现在不需要加载这个命名空间。我不能包括他们的,因为它来自 Oracle db 包。我需要类似尝试但在名称空间上的东西。现在,如果没有此命名空间,应用程序将引发未处理的异常并崩溃。我想捕捉这个异常并设置一些标志,如noOracleClient=true;

【问题讨论】:

  • 这不应该在编译时失败而不是在运行时失败吗?如果编译失败,直接删除?
  • 您需要解决语法问题,并更具体地说明您要达到的目标。向我们展示一个崩溃的代码示例。

标签: c# oracle namespaces


【解决方案1】:

我认为它不会像你想要的那样工作。听起来你真正想要的是一个依赖注入框架,比如 Ninject。

【讨论】:

    【解决方案2】:

    我建议将您的 Oracle 访问代码放在单独的程序集中。然后通过接口公开功能,并为该接口编写代码。

    然后您可以使用类似 Joel C 建议的 Ninject 或可能的 MEF (http://stevenhollidge.blogspot.com/2011/04/how-to-use-mef-with-c.html) 来加​​载您的程序集作为具体类。

    【讨论】:

      【解决方案3】:

      尝试通过反射使用全名“Oracle.DataAccess.Client”加载程序集

      using System.Reflection;
      string fullName = "fully qualified assembly name";
      Assembly assembly = Assembly.LoadFrom(fullName);
      

      如果 Oracle.DataAccess.Client 在 GAC 中,此代码将正确执行,否则 - 将引发异常。您应该指定完整的程序集名称以加载特定版本的 Oracle 客户端

      【讨论】: