在尝试使用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)
。