Ninject模块的意图是什么?

编程入门 行业动态 更新时间:2024-10-25 13:29:29
本文介绍了Ninject模块的意图是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我是一个完整的新手ninject

I'm a complete newbie to ninject

我一直在剥夺别人的代码,并发现了nInject模块的几个实例 - 派生自Ninject.Modules的类.Module,并且有一个包含大部分代码的加载方法。

I've been pulling apart someone else's code and found several instances of nInject modules - classes that derive from Ninject.Modules.Module, and have a load method that contains most of their code.

这些类是通过调用StandardKernel实例的LoadModule方法来调用的,并传递一个模块类。

These classes are called by invoking the LoadModule method of an instance of StandardKernel and passing it an instance of the module class.

也许我在这里缺少一些明显的东西,但是这样做的好处就是创建一个简单的旧类并调用其方法,或者也可以静态类用静态方法?

Maybe I'm missing something obvious here, but what is the benefit of this over just creating a plain old class and calling its method, or perhaps a static class with a static method?

推荐答案

Ninject模块是用于向IoC容器注册各种类型的工具。优点是这些模块然后保存在自己的类中。这允许您在自己的模块中放置不同的层/服务。

The Ninject modules are the tools used to register the various types with the IoC container. The advantage is that these modules are then kept in their own classes. This allows you to put different tiers/services in their own modules.

// some method early in your app's life cycle public Kernel BuildKernel() { var modules = new INinjectModule[] { new LinqToSqlDataContextModule(), // just my L2S binding new WebModule(), new EventRegistrationModule() }; return new StandardKernel(modules); } // in LinqToSqlDataContextModule.cs public class LinqToSqlDataContextModule : NinjectModule { public override void Load() { Bind<IRepository>().To<LinqToSqlRepository>(); } }

拥有多个模块允许分离问题,即使在您的IoC容器。

Having multiple modules allows for separation of concerns, even within your IoC container.

其余的问题听起来像是更多关于IoC和DI的整体,而不仅仅是Ninject。是的,您可以使用静态配置对象来完成IoC容器所做的所有操作。当您有多个层次结构的依赖关系时,IoC容器变得非常好。

The rest of you question sounds like it is more about IoC and DI as a whole, and not just Ninject. Yes, you could use static Configuration objects to do just about everything that an IoC container does. IoC containers become really nice when you have multiple hierarchies of dependencies.

public interface IInterfaceA {} public interface IInterfaceB {} public interface IInterfaceC {} public class ClassA : IInterfaceA {} public class ClassB : IInterfaceB { public ClassB(IInterfaceA a){} } public class ClassC : IInterfaceC { public ClassC(IInterfaceB b){} }

建立ClassC在这一点上是一个痛苦,具有多个接口深度。只需向内核询问一个IInterfaceC就可以轻松得多。

Building ClassC is a pain at this point, with multiple depths of interfaces. It's much easier to just ask the kernel for an IInterfaceC.

var newc = ApplicationScope.Kernel.Get<IInterfaceC>();

更多推荐

Ninject模块的意图是什么?

本文发布于:2023-05-27 09:57:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/285758.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:意图   模块   Ninject

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!