簡體   English   中英

Activator.CreateInstance在1個解決方案中引發MissingMethodException,但在另一個解決方案中不引發

[英]Activator.CreateInstance throws MissingMethodException in 1 solution but not another

嘗試使用Activator.CreateInstance時,我的一種解決方案出現了一個奇怪的錯誤,該方法已將正在創建的類型的.ctor參數從普通的通用T更改為IEnumerable。 我已經將足夠的代碼提取到控制台應用程序中以進行隔離測試,但它似乎可以正常工作。

以下是在控制台應用中有效的提取代碼-

 class Program
 {
     static void Main(string[] args)
     {
         Notify(new List<MyBase> { new MyBase(), new MyBase() });
     }

     private static void Notify<T>(IEnumerable<T> changes) where T : IMy
     {
         var dtoType = changes.First().GetType();

         var type = typeof(MyNotification<>).MakeGenericType(dtoType);
         var notification = (IMyNotification)Activator.CreateInstance(type, new object[] { changes });
     }
 }

 public interface IMy { }

 public class MyBase : IMy { }

 public interface IMyNotification { }

 public interface IMyNotification<T> : IMyNotification where T : IMy
 {
 }

 public class MyNotification<T> : IMyNotification<T> where T : IMy
 {
     public MyNotification(IEnumerable<T> mys) { }
 }

本質上,這與我原始解決方案中運行的代碼相同。

該錯誤是MissingMethodException,因此找不到匹配的.ctor。

用盡所有可能的原因的想法,在調試器中查看兩種解決方案的類型信息,我看不出任何區別。 該解決方案將清理並構建所有項目。

編輯

希望有人可以指出我的另一個方向來潛在地解決此問題。

謝謝

編輯

我嘗試將.ctor更改為“對象”類型,並且通過該更改,Activator可以創建該類型。

如果需要,只需使用new MyNotification<T>(changes)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM