激活.CreateInstance在一个解决方案中抛出MissingMethodException,而不是另一个解决方案



在尝试使用Activator时,我的一个解决方案出现了奇怪的错误。CreateInstance将创建的类型的. tor的参数从普通泛型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,所以它不能找到一个匹配的。tor。

关于什么可能导致这种情况的想法,在调试器中查看两种解决方案的类型信息,我看不到任何差异。所有的项目都是用这个解决方案清理和构建的。

编辑

希望有人能给我指出另一个可能解决这个问题的方向。

感谢

编辑

我已经尝试将。tor更改为"对象"类型,并通过该更改激活器可以创建该类型。

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

相关内容

  • 没有找到相关文章

最新更新