Search code examples
c#reflectionactivator

Activator.CreateInstance throws MissingMethodException in 1 solution but not another


I am having a strange error in one of my solutions while attempting to use Activator.CreateInstance having changed the parameter for the .ctor on the type being created from a plain generic T to an IEnumerable. I have extracted enough code to a console app to test in isolation but it appears to work just fine.

Below is the extracted code that works in the console app -

 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) { }
 }

Essentially this is the same code as is running in my original solution.

The error is a MissingMethodException, so it cannot find a matching .ctor.

Run out of ideas on what could be causing this, looking at the type information in the debugger for both solutions I cannot see any difference. All projects are cleaned and built with the solution.

edit

Hoping someone can point me in another direction to potentially solve this issue.

Thanks

edit

I have tried changing the .ctor to be of type 'object' and with that change Activator can create the type.


Solution

  • Just use new MyNotification<T>(changes) if it is what you need.