使用反射

时间:2015-08-19 06:32:54

标签: c# reflection

无法解决此问题,迫切需要帮助。我的项目是用下面的类调用一个dll。我需要使用静态方法使用反射但由于异常而无法使其工作"对象引用未设置为对象的实例"

namespace Binit.Core.Database
{

public abstract class DbFormat
{
    protected static DbFormat m_internalDbFormat;
    public static DbFormat Create()
     {
          return m_internalDbFormat.internalCreate();
     }
}
}

代码下方

Binit.Core.Database.DbFormat format;
format = Binit.Core.Database.DbFormat.Create();

使用反射的代码下面

Assembly CoreDatabaseAssembly = Assembly.LoadFrom(Path.Combine(APath, @"Binit.Core.Database.dll"));
Type typDbFormatClass = CoreDatabaseAssembly.GetType("Binit.Core.Database.DbFormat");
MethodInfo createFormatMethod = typDbFormatClass.GetMethod("Create", BindingFlags.Static | BindingFlags.Public, null, new Type[] { }, null);
object objDbFormat = createFormatMethod.Invoke(null, null);

例外:

内部异常显示Object reference not set to an instance of an object.

InnerException null

堆栈跟踪

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[]   arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at AB.INIT.stringToValue(String valueInUnits, String dimension, String sourceUnit, String destinationUnit)
当我使用反射时,

m_internalDbFormat为null。但是当我做直接引用代码时,即使我只执行create方法,它也不会变为null。我相信这意味着使用直接引用加载引用并使用反射我可能需要设置它们明确。似乎Binit.Core.Database.Implementation是在直接引用的项目中引用的dll。所以我可能需要调用这种明确性。有任何想法吗。

0 个答案:

没有答案