如何将 Ninject 中的参数添加到已解析的依赖项中?

How do I add parameters in Ninject to a resolved dependency?

我正在使用 MVVM 模型创建一个 WPF 应用程序。作为程序的一部分,我正在创建一个 UserControl,其中包含 UserControlsItemsControl,并链接了自己的 ViewModel。

代码如下所示;

List<IDataViewModel> viewModels = new List<IDataViewModel>();

foreach (var type in Enum.GetValues(typeof(DataModel)))
{
    var tempVM = ViewModelLocator.Get<IDataViewModel>();
    tempVM.Type = type;
    viewModels.Add(tempVM);
}

有没有办法简写这个或将参数作为 .Get<> 调用的一部分传递?

编辑

我已经按照答案中的建议去查看工厂模式,并更新了我的代码如下:

工厂,Ninject-模块

public interface IViewModelFactory
{
    IDataViewModel CreateDataViewModel(DataType type);
}

public class ViewModelModule : NinjectModule
{
    public override void Load()
    {
        Bind<IDataViewModel>().To<DataViewModel>();
        Bind<IViewModelFactory>().ToFactory();
    }
}

上面的代码变成了;

foreach (var type in Enum.GetValues(typeof(DataModel)))
{
    viewModels.Add(viewModelFactory.CreateDataViewModel(type));
}

第一次调用 Factory 似乎有效并创建了一个新的 ViewModel,但是连续调用失败(也就是说似乎没有创建新的 ViewModels),有什么我想念的吗?我在网上找不到太多内容,而且措辞不明确且包含语法错误。我从中获得最多的页面没有说明为什么会发生这种情况。我的工厂中是否需要多个“IDataViewModels”? 像这样;

public interface IViewModelFactory
{
    IDataViewModel CreateDataViewModel1(AccountType type);
    IDataViewModel CreateDataViewModel2(AccountType type);
    IDataViewModel CreateDataViewModel3(AccountType type);
    IDataViewModel CreateDataViewModel4(AccountType type);
}

第二次编辑

确保在向 Factory Interface CreateDataViewModel(var Variable) 添加变量时,在实际视图模型构造函数签名中反映此更改!我的新手错误!

可以这样通过构造函数注入传递参数:

var typeParam = new ConstructorArgument("type", type);
ViewModelLocator.Get<IDataViewModel>(typeParam);

但是我建议使用强类型工厂,而不是使用静态服务定位器,然后通过构造函数注入再次注入这个工厂。

https://github.com/ninject/Ninject.Extensions.Factory/wiki