正如Wim所说,这不是开箱即用的本地支持。如果您希望能够做这样的事情:
[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>();
}
}
你不会需要[Export]
您Service
类型(实际上是很可能会造成问题),但你可以[Import]
和Service
实例[ImportMany]
如果你与你的容器提供者登记,并设置SourceProvider
属性:
var catalog = // create catalogs/
var provider = new ServiceExportProvider();
var container = new CompositionContainer(catalog, provider);
provider.SourceProvider = container;