Activator.CreateInstance выдает MissingMethodException в 1 решении, но не в другом

У меня возникла странная ошибка в одном из моих решений при попытке использовать 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 на тип «объект», и с этим изменением активатор может создать тип.


person antinutrino    schedule 04.08.2014    source источник
comment
Есть ли причина не использовать здесь new MyNotification<T>(changes)?   -  person tia    schedule 04.08.2014
comment
Вы можете распечатать / показать, что это за тип? Вы уверены, что это не MyBase?   -  person T McKeown    schedule 04.08.2014
comment
@tia - не могу поверить, что я этого не видела! исходный код не мой, поэтому попытался запустить его так, как он работал. большое спасибо   -  person antinutrino    schedule 04.08.2014
comment
но вопрос почему динамический? будут ли когда-нибудь еще типы, реализующие IMyNotification<T>?   -  person T McKeown    schedule 04.08.2014
comment
@tia - пожалуйста, добавьте свой комментарий в качестве ответа, и я могу его принять. Спасибо еще раз!   -  person antinutrino    schedule 04.08.2014
comment
@TMcKeown, возможно, да.   -  person antinutrino    schedule 04.08.2014
comment
ну тогда вам придется иметь дело с этим снова ...   -  person T McKeown    schedule 04.08.2014


Ответы (1)


Просто используйте new MyNotification<T>(changes), если это то, что вам нужно.

person tia    schedule 04.08.2014