Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 928
dymanoid Avatar asked Nov 26 '14 13:11

dymanoid


1 Answers

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

like image 136
Wim Coenen Avatar answered Oct 26 '22 23:10

Wim Coenen