У меня возникла странная ошибка в одном из моих решений при попытке использовать 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 на тип «объект», и с этим изменением активатор может создать тип.
new MyNotification<T>(changes)
? - person tia   schedule 04.08.2014MyBase
? - person T McKeown   schedule 04.08.2014IMyNotification<T>
? - person T McKeown   schedule 04.08.2014