2014-05-22 28 views
2

我有一個駐留在與核心項目不同的項目(因此不同的程序集)的服務。MVVMCross - 在另一個程序集中自動註冊單例

我可以手動RegisterSingleton<>()

但是我希望標準LINQ查詢將它撿起來,我註冊單:CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();

的問題是可創建的類型只出現在當前裝配的樣子。什麼是使用反射超載的最佳方式?

我看了解從this question獲取程序集的解決方案,但它們不能在PCL內工作。

回答

4

CreateableTypes()有一個可以使用的過載CreateableTypes(Assembly assembly)。要從PCL項目獲得服務所在的組件,您應該能夠在您的服務類型上使用GetTypeInfo().Assembly(請參閱this SO答案)。

因此,得出結論:

var assembly = typeof(ResidingInAnotherAssemblyService).GetTypeInfo().Assembly; 
CreatableTypes(assembly).EndingWith("Service").AsInterfaces().RegisterAsLazySingleton(); 
+0

謝謝。我知道我需要超載,但獲得組裝是一個棘手的問題。感謝GetTypeInfo()。Assembly'提示。 – SeeMoreGain

0

要在安德斯答案擴大。我們只需在我們的(不同的)PCL中添加一個靜態類。

public static class MvxBootstrap 
{ 
    public static void Initialize() 
    { 
     typeof(MvxBootstrap).GetTypeInfo().Assembly.CreatableTypes() 
      .EndingWith("Service") 
      .AsInterfaces() 
      .RegisterAsLazySingleton(); 

     typeof(MvxBootstrap).GetTypeInfo().Assembly.CreatableTypes() 
      .EndingWith("Client") 
      .AsInterfaces() 
      .RegisterAsLazySingleton(); 
    } 
} 

然後在您的App.cs核心只需撥打MvxBootstrap.Initialize();

相關問題