【发布时间】:2019-04-03 05:09:53
【问题描述】:
我需要自动解决我的 windows 窗体的依赖关系。唯一的问题是我的表单构造函数也需要一个整数值。请看代码部分的实现。
//Ninject bindings
public class Bindings : NinjectModule
{
public override void Load()
{
Bind<ILogger>().To<LogToDB>();
Bind<ICopy>().To<CopyToFolder>();
}
}
//WinForm - Form1
public partial class Form1 : Form
{
public readonly ILogger _processRepository;
public readonly Icopy _copy;
public readonly int ValueToEdit;
public Form1(int valueToEdit, ILogger logger, ICopy copy)
{
this._processRepository = logger;
this._copy = copy;
this.ValueToEdit = valueToEdit;
InitializeComponent();
}
}
//main
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
IKernel kernel = new StandardKernel(new Bindings());
Application.Run(kernel.Get<Form1>());
}
我收到一个错误: Ninject.ActivationException: '错误激活 int 没有匹配的绑定可用,并且类型不是自绑定的。
我怎样才能自动解决表单依赖关系,也能传递整数值?实际上,我使用相同的表单来添加和编辑,所以在编辑时,应该设置这个编辑值。
【问题讨论】:
-
顺便说一句,您的问题实际上与 Windows 窗体无关。这真的是“我如何为 ninject 提供额外的参数?”您的问题可能与this one 重复。
-
更改了问题的标题。
-
@John,在我的例子中,构造函数的值只是一个整数,只有在加载表单时才能知道它的值。
-
防止将运行时值注入构造函数in the first place。尝试添加一个
Initialize方法来传递运行时数据。还要防止使用factories to resolve dependencies。 -
@Steven,感谢您提供如此有用的答案。
标签: c# dependency-injection inversion-of-control ninject