Dot-Net

如何在沒有 Export 屬性的情況下在 MEF 中導出類型?(例如以程式方式)

  • December 7, 2016

我似乎找不到任何有關如何執行此操作的文章或連結,這似乎是一個明顯的問題(例如,當您沒有原始碼或想要使用不是為 MEF 編寫的現有類型時)

如果您希望將現有對象實例添加到容器中,可以使用以下CompositionContainer.ComposeExportedValue方法:

container.ComposeExportedValue<MyClass>(myClassInstance);

不過,您真正要尋找的可能是新的基於約定的程式模型,它允許您根據命名約定而不是屬性創建元件,但此功能僅在 .NET 4.5 中可用。

myAssembly使用範例(這將導出實現IController為的每種類型IController):

var registration = new RegistrationBuilder();

registration.ForTypesDerivedFrom<IController>()
           .Export<IController>();

var catalog = new AssemblyCatalog(myAssembly, registration);
var container = new CompositionContainer(catalog);

可以在此處找到如何使用 MEF 的新約定模型的一個很好的範例。

希望這可以幫助。

引用自:https://stackoverflow.com/questions/13433463