Я использую asp.net mvc3 с MEF + MEFContrib для загрузки некоторых служб на мои контроллеры.Происходит то, что я могу загрузить службы - IEnumerable<IPublishService> publishers
- [ImportingConstructor]
, но когда я пытаюсь загрузить службы метаданными - Lazy<IPublishService, IPluginMetaData>[] publishers
- я получаю пустой массив.
Любые мысли о том, почему?Спасибо.
Мой код:
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; }
}
[Export(typeof(IPublishService))]
[PluginMetadata("Default", "1.0.0.0")]
public class SamplePublishService : IPublishService
{
}
[ImportingConstructor]
public HomeController(Lazy<IPublishService, IPluginMetaData>[] publisher /* Empty Array */ , IEnumerable<IPublishService> publishers /* Array with 1 service */)
{
}
ОБНОВЛЕНИЕ (основано на ответе Даниила, но все еще ничего)
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class PluginMetadataAttribute : ExportAttribute
{
public PluginMetadataAttribute(string name, string version)
: base(typeof(IPublishService))
{
Name = name;
Version = version;
}
public string Name { get; set; }
public string Version { get; set; }
}
[PluginMetadata("Default", "1.0.0.0")]
public class GoogleSampleGroupPublishService : IPublishService
{
}
[ImportingConstructor]
public HomeController([ImportManyAttribute]Lazy<IPublishService, IPluginMetaData>[] publisher)
{
}