Search code examples
c#.netmef.net-assemblycomposition

How does MEF manage to instantiate an exported part which is an internal class of an external assembly?


My question is pretty simple, but unfortunately I could not find any answer yet.

Using MEF, I can specify some internal exports and imports in a class library assembly like that:

[Export]
internal class SomeExport
{ }

[ModuleExport(typeof(SomeModule))]
internal class SomeModule : IModule
{ 
    [ImportingConstructor]
    internal SomeModule(SomeExport instance)
    { }
}

My CompositionContainer is located in the main EXE assembly, but somehow it manages to instantiate the SomeExport object inside the class library assembly so I can use it. Normally, my internal class library types should not be accessible from the EXE assembly, but somehow I get my instances created.

How does it work?


Solution

  • MEF typically uses reflection to discover parts and instantiate them. Reflection is not limited by internal or even private visibility.