J'ai essayé d'utiliser le modèle de fournisseur configurable pour gérer mes importations et les exportations de MEF MEF Contrib (link). J'ai lu la documentation de Codeplex et l'article de blog de Code Junkie (link); Cependant, je n'arrive pas à obtenir le conteneur pour créer les pièces. Où vais-je mal?Contrib Modèle MEF fournisseur non importé des pièces
Program.cs
namespace MEFTest
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
// [ImportMany("command", typeof(IHelp))]
public IEnumerable<IHelp> Commands { get; set; }
void Run()
{
Compose();
foreach(IHelp cmd in Commands)
{
Console.WriteLine(cmd.HelpText);
}
Console.ReadKey();
}
void Compose()
{
var provider = new ConfigurableDefinitionProvider("mef.configuration");
var catalog = new DefinitionProviderPartCatalog<ConfigurableDefinitionProvider>(provider);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
}
TestCommand.cs
namespace MEFTest
{
//[Export("command", typeof(IHelp))]
public class TestCommand : IHelp
{
private string _helpText = "This is a test.";
public string CommandName
{
get { return "Test"; }
}
public string HelpText
{
get { return _helpText; }
}
}
}
section App.Config:
<mef.configuration>
<parts>
<part type="MEFTest.TestCommand, MEFTest">
<exports>
<export contract="IHelp" />
</exports>
</part>
<part type="MEFTest.Program, MEFTest">
<imports>
<import member="Commands" contract="IHelp" />
</imports>
</part>
</parts>
</mef.configuration>
Je ne reçois pas d'erreurs de construction et il fonctionne très bien si je passer au système basé sur les attributs typique qui fait partie du noyau MEF (avec le catalogue approprié aussi). Program.Commands est toujours NULL dans l'exemple ci-dessus. J'ai essayé d'utiliser une propriété singulière au lieu d'une collection et d'obtenir les mêmes résultats.
Quand je debug je peux obtenir la collection provider.Parts donc je sais qu'il accède correctement aux informations de configuration; cependant, j'obtiens une exception InvalidOperationException chaque fois que je débogue et j'essaie de forer dans catalog.Parts.
Quelqu'un at-il une expérience de l'endroit où je me trompe ici?