【发布时间】:2012-11-08 12:24:48
【问题描述】:
我有一个类,其中包含我的操作(任何逻辑):
public class socActions
{
public void Choose(int elem)
{
switch(elem) ... CalcA(elem) || CalcB(elem) ...
}
public void CalcA()
{
}
public void CalcB()
{
}
public void CalcC()
{
}
}
所以,在我的程序中,当我获得 elem 值时,我会像这样使用它:
(new socActions()).Choose(elem_val);
好的,但是在 socActions 类方法中,我想与我的存储库建立连接或进行任何其他依赖注入。
- 如果我将 IRepositoryMy repositoryMy 添加到构造函数,那么我不能 如上所述创建类,bcz 现在需要带有参数的构造函数 IRepositoryMy.
- 如果我尝试在现场进行注射,它不起作用 (属性 = 空)。
- 如果我尝试在方法中进行注射 (CalcA, CalcB) 它也不起作用。
我真的应该如何完成这项任务(注入类,例如存储库)?不想将我的应用程序中的所有内容都标记为静态 :(
WinForms、C#、Ninject 3
编辑:
public class socActions
{
[Inject]
public IGridProcessor _GridProcessor { private get; set; }
所以,在方法中它的 null:
public void UpdateInfo(...)
{
...
this._GridProcessor.Refresh();
}
在其他类中,我将 IGridProcessor 注入到构造函数中的类中,一切都很好。 在 Program.cs 中:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var kernel = new StandardKernel(new TwttModule());
var form = kernel.Get<Main>();
Application.Run(form);
}
public class TwttModule : NinjectModule
{
public override void Load()
{
Bind<IGridProcessor>().To<GridProcessor>();
}
}
public static class AnyClass
{
public static void Act()
{
....
(new socActions()).Choose(elem_val);
}
}
我应该如何将 IGridProcessor 注入到 socActions 中?
【问题讨论】:
-
请给我们看你的ninject代码,这是关键
-
根据传入的值选择要采取的操作的类在我看来是一种代码味道。您可能应该有一个基类或接口以及几个实现差异的类。
-
还是不明白我应该怎么做,我可以在现场注射吗?
-
您是要根据枚举值对 socActions 实例进行 ninject,还是希望 ninject 为您解决什么“配置”问题?
-
我想将 IGridProcessor 注入到 socActions
标签: c# .net dependency-injection ninject