gpt4 book ai didi

c# - Ninject:实现 WithConstructorArgument(string name, Func callback)

转载 作者:太空狗 更新时间:2023-10-29 23:17:56 28 4
gpt4 key购买 nike

我有一个 MVVM WP7 应用程序,我在其中尝试将值从一个页面/ViewModel 发送到第二个 ViewModel 的构造函数。我已经设置了 Ninject,并使用如下一行让它与静态测试值一起工作:

this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690)

同样,这适用于静态值,但我需要它是用户选择的变量。我被告知要使用重载

WithConstructorArgument(string name, Func<IContext,object> callback). 

我认为这个回调会在第一个 ViewModel 上调用一个函数并获取值。

但我还没有成功,很容易承认我在 Ninject 或使用 Func 回调参数方面都不是很有经验。我已经尝试设置一个委托(delegate)和函数来从第一个 ViewModel 获取值,但这给出了一个错误,指出我正在尝试传递一个类型。我究竟如何指定该参数以使用回调,我是否正确地在第一个 ViewModel 或其他东西中使用委托(delegate)?

最佳答案

正如我在您的另一篇文章中所说,在 get 上传递参数可能是更好的方法。因此创建一个工厂接口(interface)

public interface ITaskViewFactory
{
TaskViewModel CreateTaskViewModel(int id);
}

在你的 Bootstrap 中(负责使用 Ninject 创建一切的程序集,通常应该是另一个而不是你实现具有商业值(value)的一切的程序集)添加实现

Public class TaskViewFactory : ITaskViewFactory
{
Private IKernel kernel;
Public TaskViewFactory(IKernel kernel)
{
this.kernel = kernel;
}

public TaskViewModel CreateTaskViewModel(int taskId)
{
this.kernel.Get<ITaskViewModel>(new ConstructorArgument("TaskId", taskId);
}
}

然后将工厂注入(inject)您的任务选择命令,并在选择任务时调用工厂。

关于c# - Ninject:实现 WithConstructorArgument(string name, Func<IContext,object> callback),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com