Activator.CreateInstance在1个解决方案中抛出MissingMethodException而不是另一个解决方案

时间:2014-08-04 14:50:55

标签: c# reflection activator

我在尝试使用Activator.CreateInstance时,在我的一个解决方案中出现了一个奇怪的错误,它将从正常通用T创建的类型的.ctor参数更改为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更改为'object'类型,并且使用该更改Activator可以创建类型。

1 个答案:

答案 0 :(得分:0)

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