如何将参数传递给MvvmCross中的IOC构造函数?

时间:2013-12-14 03:54:55

标签: inversion-of-control mvvmcross

在PCL插件中,我有一个界面,称之为IFile。在我的各种平台上,PlatformFile。我可以使用Mvx.RegisterType注册,以便Mvx.Resolve将为我提供一个平台文件的IFile。其中一个PlatformFile构造函数有一个参数,比如说名称

public PlatformFile(string name)

我如何Mvx.Resolve并传入名称?

2 个答案:

答案 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,将允许您解析该类的实例。