mam dwie dll'ki (wtyczki/pluginy)
namespace MEF_Wtyczka_MessageBoxSender
{
[Export(typeof(IMessageSender))]
[PluginMetadata("Default", "1.1.0.0")]
public class MessageBoxSender : IMessageSender
{
...
}
}
namespace MEF_Form
{
[Export(typeof(IMessageSender))]
[PluginMetadata("MojaForma", "1.2.0.0")]
public partial class formularz : Form, IMessageSender
{
...
}
}
mam również interfejs opisujący właściwości nazwa/wersja każdej wtyczki
public interface IPluginMetaData
{
string Name { get; }
string Version { get; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class PluginMetadataAttribute : ExportAttribute
{
public PluginMetadataAttribute(string name, string version)
: base(typeof(IPluginMetaData))
{
Name = name;
Version = version;
}
public string Name { get; set; }
public string Version { get; set; }
}
Staram się załadować wtyczki :
[ImportMany(typeof(IMessageSender), AllowRecomposition=false)]
public Lazy<IMessageSender, IPluginMetaData>[] _loadedIPlugins { get; set; }
private void Compose()
{
DirectoryCatalog appDir = new DirectoryCatalog(@".\wtyczki");
CompositionContainer pluginsLoader;
pluginsLoader = new CompositionContainer(appDir);
pluginsLoader.ComposeParts(this);
MessageBox.Show(appDir.Parts.Count().ToString());
}
Tutaj MessageBox pokazuje : 2. I jest to prawdą, w katalogu są dwie wtyczki (dll'ki).
Następnie chcę wyświetlić informacje o wersji/nazwie danej wtyczki :
public void Run()
{
Compose();
MessageBox.Show(_loadedIPlugins.Count().ToString()); //msg1
foreach (var element in _loadedIPlugins)
{
MessageBox.Show((string)element.Metadata.Version + "\n" +
(string)element.Metadata.Name);
}
}
I w tym momencie, messagebox dla _loadedIPlugins pokazuje dla Count : 1
Co robię nie tak ? Dlaczego nie mogę załadować drugiej wtyczki ? :/
Po zmianie Lazy<> na :
public Lazy<IMessageSender, IDictionary<string, object>>[] _loadedIPlugins { get; set; }
ładowane są obydwie wtyczki, jednak nie mogę uzyskać dostępu do metadat poszczególnych wtyczek.
Ponownie proszę o pomoc - jak rozwiązać ten problem ?