我已經搜索了很高的內容並查找了有關使用MEF for DI的示例。我知道它不是DI,但是從我聽到的(真的聽到播客)中可以看出來,但我找不到任何博客文章或樣本。使用MEF進行DI/IoC的資源和示例
我在這個項目中已經使用MEF(支持插件),並認爲它也可以很好地利用DI。
也許我在吠叫錯誤的樹?
我已經搜索了很高的內容並查找了有關使用MEF for DI的示例。我知道它不是DI,但是從我聽到的(真的聽到播客)中可以看出來,但我找不到任何博客文章或樣本。使用MEF進行DI/IoC的資源和示例
我在這個項目中已經使用MEF(支持插件),並認爲它也可以很好地利用DI。
也許我在吠叫錯誤的樹?
這可以用一個例子來描述。例如,假設您擁有一個基於所有定製應用程序的核心庫。稱之爲MyCompany.Core。通常,您編寫的每個應用程序都必須包含對MyCompany.Core的引用,然後應用程序必須處理引導並調用MyCompany.Core以按正確的順序啓動相應的服務等。當你考慮到核心本身可能知道更好它應該如何被啓動,等
要使用MEF依賴注入這並沒有太大的意義,你的核心這樣做:
[Import("/Application", typeof(IBespokeApplication))]
private IBespokeApplication bespokeApplication;
核心本身將包含應用程序啓動代碼,並且可能調用是這樣的,一旦它已經開始了它所有的服務:
bespokeApplication.Start();
在定製的應用程序,您必須導出自己:
[Export("/Application", typeof(IBespokeApplication))]
public class MyApplication : IBespokeApplication
{
public void Start()
{
/* start app */
}
}
現在,定製的應用程序可以包含對MyCompany.Core的直接引用,並且可以直接調用服務,或者甚至可以將服務公開爲導出並將它們導入到應用程序中。舉例來說,在覈心:
[Export("/LoggingService", typeof(ILoggingService))]
public class NLogLoggingService : ILoggingService
{
/* ... */
}
然後在定製的應用程序:
[Import("/LoggingService", typeof(ILoggingService))]
private ILoggingService loggingService;
...當你想使用它:
loggingService.LogInformation("My Message");
至於我能從文獻中可以看出,這是依賴注入的本質。