Wim が言ったように、これはすぐに使用できるネイティブ サポートではありません。このようなことができるようにしたい場合:
[ImportMany]
public IEnumerable<Service> _services { get; set; }
ServiceProvider
...ファクトリ( Wimによる詳細など)を使用せずに、エクスポートプロバイダーが機能します。たとえば、次のようになります。
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>();
}
}
[Export]
タイプを指定する必要はありませんService
(実際には問題が発生する可能性があります) が、コンテナーでプロバイダーに登録し、プロパティを設定している場合は、[Import]
インスタンスを指定できます。[ImportMany]
Service
SourceProvider
var catalog = // create catalogs/
var provider = new ServiceExportProvider();
var container = new CompositionContainer(catalog, provider);
provider.SourceProvider = container;