在PCL插件中,我有一个界面,称之为IFile。在我的各种平台上,PlatformFile。我可以使用Mvx.RegisterType注册,以便Mvx.Resolve将为我提供一个平台文件的IFile。其中一个PlatformFile构造函数有一个参数,比如说名称
public PlatformFile(string name)
我如何Mvx.Resolve并传入名称?
答案 0 :(得分:3)
你根本无法按照自己的方式做到这一点。
IoC / Service Location建立在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容器注册ISQLiteConnectionFactory
对象
public interface ISQLiteConnectionFactory
{
ISQLiteConnection Create(string address);
}
有关IoC的更多信息,请参阅https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control
答案 1 :(得分:1)
您可以在创建该类的新实例时调用PlatformFile的构造函数,然后通过调用Mvx.RegisterSingleton将其注册为单例。调用Mvx.Resolve,将允许您解析该类的实例。