Xamarin.forms Caliburn.微量注射含有Xamarin的集合.表单应用程序

Xamarin.forms Caliburn.微量注射含有Xamarin的集合.表单应用程序,xamarin.forms,caliburn.micro,Xamarin.forms,Caliburn.micro,我正在将Caliburn.Micro与Xamarin.Forms结合使用。在我的App类中,我通过SimpleContainer的PerRequest方法向类LicenseInfoImplementation注册接口ILicenseInfo。 然后,CM在创建视图模型时注入一个对象(请参见ViewModelOne),这正是我想要的。但是,我不知道如何将其扩展到对象集合。假设我希望CM实例化ViewModel2,它需要一个对象集合。我必须如何更改App.cs和ViewModel2的XAML才能实现

我正在将Caliburn.Micro与Xamarin.Forms结合使用。在我的App类中,我通过SimpleContainer的PerRequest方法向类LicenseInfoImplementation注册接口ILicenseInfo。 然后,CM在创建视图模型时注入一个对象(请参见ViewModelOne),这正是我想要的。但是,我不知道如何将其扩展到对象集合。假设我希望CM实例化ViewModel2,它需要一个对象集合。我必须如何更改App.cs和ViewModel2的XAML才能实现这一点

public partial class App : FormsApplication
{
    private readonly SimpleContainer _container;

    public App (SimpleContainer container)
    {
        InitializeComponent();
        this._container = container;    
        // register interface and class
        _container.PerRequest<ILicenseInfo, LicenseInfoImplementation>();   
        //....
    }
}

public ViewModelOne(ILicenseInfo license)
{
    // Great, Caliburn.Micro injects an LicenseInfoImplementation object
}

public ViewModelTwo(IEnumerable<ILicenseInfo> licenses)
{
    // No idea 
}
公共部分类应用程序:FormsApplication
{
私有只读SimpleContainer\u容器;
公共应用程序(SimpleContainer容器)
{
初始化组件();
这个._容器=容器;
//寄存器接口和类
_container.PerRequest();
//....
}
}
public ViewModelOne(ILicenseInfo许可证)
{
//很好,Caliburn。Micro注入了一个LicenseInfoImplementation对象
}
公共视图模型二(IEnumerable许可证)
{
//不知道
}

我最终使用了以下模式。不是最优雅的方式,而是我发现的最好的方式

public ViewModelTwo() : base (IoC.GetAll<ILicenseInfo>())
{
}

public ViewModelTwo(IEnumerable<ILicenseInfo> licenses)
{
// Do something with licenses
}
public ViewModelTwo():base(IoC.GetAll())
{
}
公共视图模型二(IEnumerable许可证)
{
//对许可证做些什么
}

写一个包装器怎么样,这样您就可以用属性IEnumerable编写一个接口
ILicenseInfoContainer
,实现这个接口,在CM容器中注册它,并在ViewModel中使用它,这将是一个可行的解决方法。另一种方法是创建一个默认构造函数,并在其中通过IEnumberable impl=IoC.Get()检索所需的集合;理想情况下,我正在寻找一种不必更改视图模型方法的签名或创建显式CM依赖项(如在视图模型中使用IoC类)的解决方案