ウィムが言ったように、これはネイティブでサポートされていません。あなたはこのような何かを行うことができるようにしたい場合:
[ImportMany]
public IEnumerable<Service> _services { get; set; }
...工場(ヴィムによる詳細などServiceProvider
)を使用せずに、エクスポート・プロバイダは、例えば、動作します:
public class ServiceExportProvider : ExportProvider
{
private const string ContractName = AttributedModelServices.GetContractName(typeof(Service));
public ExportProvider SourceProvider { get; set; }
protected override IEnumerable<Export> GetExportsCore(ImportDefinition def, AtomicComposition ac)
{
if (SourceProvider == null)
throw new InvalidOperationException("SourceProvider property must be set.");
if (def.ContractName.Equals(ContractName))
{
return SourceProvider
.GetExports<IDependency>()
.Select(e => new Export(def.ContractName,() => new Service(e.Value)));
}
return Enumerable.Empty<Export>();
}
}
あなたは(実際にそうな問題を引き起こすこと)あなたの
Service
タイプを
[Export]
する必要はありませんが、あなたは
[Import]
と
Service
インスタンスの
[ImportMany]
をすることができ、あなたのコンテナを持つプロバイダに登録している場合、および
SourceProvider
プロパティを設定
:
var catalog = // create catalogs/
var provider = new ServiceExportProvider();
var container = new CompositionContainer(catalog, provider);
provider.SourceProvider = container;