c# - 不懂ninject和injecting

标签 c# .net dependency-injection ninject

我有一个类,其中包含我的操作(任何逻辑):

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 类方法中,我想与我的存储库建立连接或进行任何其他依赖项注入(inject)。

  1. 如果我将 IRepositoryMy repositoryMy 添加到构造函数,那么我不能 如上所述创建类,bcz 现在需要带参数的构造函数 IRepository我的。
  2. 如果我尝试在现场进行注入(inject),那是行不通的 (属性 = 空)。
  3. 如果我尝试在方法中进行注入(inject)(CalcA, CalcB) 它也不起作用。

我应该如何完成这项任务(注入(inject)类,例如存储库)?不想将我的应用程序中的所有内容都标记为静态 :(

WinForms、C#、Ninject 3

编辑:

public class socActions
{
    [Inject]
    public IGridProcessor _GridProcessor { private get; set; }

所以,在方法中它是空的:

public void UpdateInfo(...)
{                
    ...
    this._GridProcessor.Refresh();
}

在其他类中,我将 IGridProcessor 注入(inject)构造函数中的类,一切正常。 在 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 注入(inject) socActions?

最佳答案

当使用构造函数注入(inject)时,您不会直接构造您的类,而是向 ninject 请求一个实例。根据您配置 ninject 的方式,您将获得一个新实例或一个单例实例等。

来自他们的文档:

Samurai warrior = kernel.Get<Samurai>();

关于c# - 不懂ninject和injecting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473153/

相关文章:

c# - WP8 照片相机源,旋转 Video rush 时被拉伸(stretch)

c# - 将时间跨度转换为 float

c# - 如何删除选中复选框的数据 GridView 中的行?

java - 如何在一个类中@Inject两个相似的实现?

c# - 什么时候更细粒度的锁定对性能更好?

c# - 返回小数位的自定义方法显示奇怪的行为

.net - 将内存中的 24 位图像转换为索引颜色

.net - 覆盖 Equals 方法时是否需要覆盖 == 和 != 运算符? (。网)

javascript - AngularJS:缩小后出错

java - 在 Guice 中使用命名注入(inject)