不了解ninject和注入

Posted

技术标签:

【中文标题】不了解ninject和注入【英文标题】:Dont understand ninject and injecting 【发布时间】: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 【参考方案1】:

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

来自他们的文档:

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

【讨论】:

那么,我应该如何注射? Ninject 将注入。你只需要它的构造函数。注入的全部意义不再是您所关心的。 你建议我创建静态内核? 阅读 ninject 文档。这通常会有所帮助。

以上是关于不了解ninject和注入的主要内容,如果未能解决你的问题,请参考以下文章

Ninject之旅之七:Ninject依赖注入

验证:如何使用Ninject注入模型状态包装器?

IOC框架之Ninject 简介

IOC框架之Ninject 简介

使用 Ninject

使用 Ninject、MVC 3 和使用服务定位器模式的依赖注入