[英]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.