2013-12-14 255 views
2

在PCL插件中,我有一個接口,稱之爲IFile。在我的各種平臺中,PlatformFile。我可以使用Mvx.RegisterType註冊,這樣Mvx.Resolve會給我一個PlatformFile的IFile。其中PlatformFile構造函數有一個參數,可以說這個名字讓如何將參數傳遞給MvvmCross中的IOC構造函數?

公共PlatformFile(字符串名稱)

如何Mvx.Resolve,並通過在名字?

回答

1

當您創建該類的新實例時,您可以調用PlatformFile的構造函數,然後通過調用Mvx.RegisterSingleton將其註冊爲單例。調用Mvx.Resolve,將允許您解決該類的實例。

3

你根本無法按照你所嘗試的方式做到這一點。

IoC/Service位置建立在C#接口之上。

接口提供contracts在屬性和方法方面 - 但他們做而不是包含構造函數。


正常方式這種類型的場景是提供一種用於IFileFactory的接口 - 此工廠然後可以提供一個Create方法返回一個IFile - 例如

public interface IFileFactory 
    { 
     IFile Create(string name); 
    } 

這是在(例如)所述MvvmCross SQLite的插件所採取的做法 - https://github.com/MvvmCross/MvvmCross-SQLite/blob/master/Sqlite/Cirrious.MvvmCross.Community.Plugins.Sqlite/BaseClasses.cs - 其與IoC容器

public interface ISQLiteConnectionFactory 
{ 
    ISQLiteConnection Create(string address); 
} 

更多關於IoC的看到https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control

註冊一個 ISQLiteConnectionFactory對象
相關問題