有人可以請解釋發生在我身上的事情嗎?我有一個測試項目,測試我的服務的虛擬實例。在測試項目中,我只需引用dummyService.exe和System.SystemProcess dll。無法投出XXXXXX類型的對象來鍵入IXXXXX(.NET 4.0)
然而,在我的dummyService項目中,我引用了類庫,它本身使用其他組件的其他組件以及我的解決方案中的其他項目。
問題是,當我運行我的測試時,會拋出異常(加載並在dummyService中工作的dll的第一個機會異常),另外還有invalidcast異常(下面的錯誤消息)。
無法投射「Export.CaseOutputGenerator」類型的對象以鍵入「Export.ICaseOutputGenerator」。 System.InvalidCastException被捕獲 Message =無法將類型爲'Export.CaseOutputProcess.CustomCaseOutputGenerator'的對象強制類型爲 'Export.CaseOutputProcess.ICaseOutputGenerator'。 源= Export.CaseOutputProcess 堆棧跟蹤: 在Export.CaseOutputProcess.CaseOutputGeneratoryFactory.GetCaseOutputGeneratorObject(字符串的AssemblyName,字符串的className) 在C:\監視器\ Export.CaseOutputProcess \ CaseOutputGeneratoryFactory.cs:線56 在Monitor.BOMock.GenerateCaseOutput(字符串OutputFolder,字符串iFile,Int32 seqNum,數據表CaseSettings,字符串SettingFileName) in C:\ Monitor \ BOMock \ BOMock.cs:line 1069 at Monitor.BOMock.Handling()in C:\ Monitor \ BOMock \ BOMock.cs :line 492 InnerException:
public static ICaseOutputGenerator GetCaseOutputGeneratorObject(string assemblyName, string className)
{
ICaseOutputGenerator customeOutputGen = null;
var obj = GetObject(assemblyName, className);
if (obj != null)
caseOutputGen = (ICaseOutputGenerator)obj; // FAILS HERE
return caseOutputGen;
}
private static object GetObject(string fullName, string className)
{
try
{
Type caseOutputGen = null;
var localAssembly = Assembly.LoadFrom(fullName);
foreach (var testType in localAssembly.GetTypes())
{
if (!testType.FullName.EndsWith(className, StringComparison.InvariantCultureIgnoreCase)) continue;
caseOutputGen = testType;
break;
}
if (caseOutputGen == null) return null;
var obj = Activator.CreateInstance(caseOutputGen);
return obj;
}
catch (FileNotFoundException ex)
{
throw new Exception("Failed to load assembly: " + Environment.NewLine + fullName, ex);
}
catch (Exception ex)
{
throw new Exception("Failed to load assembly: " + Environment.NewLine + fullName, ex);
}
}
其中assemblyName是路徑到dll文件加載和className碰巧是創建實例的類的名稱。
在代碼中,如您所見,使用反射我加載程序集所提供的assemblyName PATH(String assemblyName)http://msdn.microsoft.com/en-us/library/system.reflection.assembly.loadfrom.aspx,然後再次使用反射,然後創建包含在className(String className)中的實例加載組件。 http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
請問我該如何解決這個問題?我不想在測試項目中引用所有的dll。我該如何解決或解決這個問題?提前致謝。
你有沒有看過Ninject的注射劑? – DiskJunky 2013-02-25 22:14:01
什麼是* full *消息?這個*通常是*當你在兩個不同的程序集中聲明瞭'ICaseOutputGenerator'時 - 在這種情況下,這是兩個不同的和不相關的'ICaseOutputGenerator'接口。 – 2013-02-25 22:21:51
這恰好是完整的信息。我不確定我應該發佈什麼其他信息。請讓我知道你需要我發佈什麼。 – Kobojunkie 2013-02-25 22:34:02