使用MEF 1,可以使用ComposeExportedValue(...) - 方法(container.ComposeExportedValue...
)將現有對象組合到容器中。 Microsoft.Composition(MEF 2)如何做到這一點?爲此我找不到任何方法。使用MEF 2編寫導出值
2
A
回答
1
System.Composition。* _是MEF,其已經用於靜態組合物場景優化和提供更快的組合物的輕量級版本。
而據我所知,從我的經驗System.Composition不支持動態組合。如果你需要這樣的功能,你必須使用標準的MEF(System.ComponentModel.Composition。*)。
2
我會在這一個鏡頭。誠然,在對MEF 1進行一些有限的曝光之後,我只有大約一週時間學習MEF 2。所以,請考慮以下答案,因爲這可能是完全錯誤的。另外,我發現文檔非常差,並且過時,所以迄今爲止在各方面都是一場艱苦的戰鬥。
在我的解決方案中,我使用了ExportDescriptorProvider
並將其擴展爲InstanceExportDescriptorProvider
,如以下代碼所示。
(!請注意,這應被視爲證據的概念,而不是最終的代碼)
public class InstanceExportDescriptorProvider : ExportDescriptorProvider
{
readonly object instance;
public InstanceExportDescriptorProvider(object instance)
{
this.instance = instance;
}
public override IEnumerable<ExportDescriptorPromise> GetExportDescriptors(CompositionContract contract, DependencyAccessor descriptorAccessor)
{
if (contract.ContractType.IsInstanceOfType(instance))
{
yield return new ExportDescriptorPromise(contract, contract.ContractType.FullName, true, NoDependencies, dependencies => ExportDescriptor.Create((context, operation) => instance, NoMetadata));
}
}
}
(使用xUnit 2.0與AutoFixture配對),以顯示如何做到這一點可以使用如下支持試驗:
[Theory, AutoData]
public void VerifyInstanceExport(Assembly[] assemblies)
{
using (var container = new ContainerConfiguration()
.WithProvider(new InstanceExportDescriptorProvider(assemblies))
.CreateContainer())
{
var composed = container.GetExport<Assembly[]>();
Assert.Equal(assemblies, composed);
}
}
在我來說,我想有機會獲得傳入ContainerConfiguration
(不可見/在上面的例子測試)的組件所以這就是爲什麼我與組件測試。
希望這將足以讓你在你的路上。或者無論如何,一些的方式。
相關問題
- 1. 導入使用MEF
- 2. MEF 2:導入很多
- 3. MEF 2無屬性導入
- 4. 用MEF導入導出對象
- 5. 如何使用編程方式使用通過MEF導出的方法?
- 6. 在MEF 2中使用封閉類型編寫開放式類型
- 7. C#:MEF導出屬性
- 8. MEF中的ExpandoObject導出
- 9. 版本[共享] MEF導出
- 10. 棱鏡 - 如何使用MEF在ViewModel中導入IRegionManager使用MEF
- 11. 使用帶MEF的類型導出和導入代表
- 12. mvc 4 mef導入/導出混淆
- 13. MEF導出和導入抽象類型
- 14. MEF/Prism導出/導入屬性屬性
- 15. MEF導出/導入靜態類嗎?
- 16. 導出/導入問題與MEF
- 17. 導出/導入MEF中的接口
- 18. MEF 2,泛型導入與實現類
- 19. 如何在MEF 2中導出工廠和/或其方法?
- 20. ExportFactory Mef 2
- 21. 如何使用MEF爲VS2010編寫插件?
- 22. 使用MEF
- 23. 使用MEF
- 24. 我如何使用Rhino Mocks來模擬MEF導出?
- 25. 使用MEF,如何導出ItemsControl的視圖?
- 26. 是否可以使用MEF和Prism導出C++ CLI接口
- 27. 如何使用MEF繼承導出和元數據?
- 28. MEF導入null
- 29. 使用MEF,注入一個導入類
- 30. 使用MEF爲同一導入提供不同的值
哇,這很醜陋。我懷疑你是正確的,WithProvider是唯一的方法來做到這一點。幸運的是,它似乎是一個可以讓你填充api中任何漏洞的全部功能。有一個github問題用於組合來自現有實例的導出值:https://github.com/dotnet/corefx/issues/11856 –