NInject: Where do you keep your reference to the Kernel?

后端 未结 3 708
终归单人心
终归单人心 2021-01-30 06:43

I\'m using NInject on a new web application and there are two things that are unclear to me:

  1. Don\'t I need to keep a reference to the Kernel around (Session/App

相关标签:
3条回答
  • 2021-01-30 07:14

    It's true that you don't want to pass around the kernel. Typically, in a web app, I store the kernel in a static property in the HttpApplication. If you need a reference to the kernel, you can just expose a dependency (via constructor argument or property) that is of the type IKernel, and Ninject will give you a reference to the kernel that activated the type.

    If you use WithArguments() on a binding, they will be used for all activations. If you use IParameters, they will only be used for that activation. (However, if the service you're activating has a re-usable behavior like Singleton, it won't be re-activated even if you pass different IParameters.)

    0 讨论(0)
  • 2021-01-30 07:29

    This is a common pitfall when starting to use a IoC container. See this related question.

    In a nutshell:

    • It's bad practice to pass your container around (been there, done that, and it really hurts)
    • If you really need to invocate directly the container, first consider abstracting to an injected factory, then as a last resource consider using a static gateway to the container
    0 讨论(0)
  • 2021-01-30 07:31

    Mark Seeman -- author of Manning Dependency Injection Suggust to Use Hollywood principle Don't call us(IOC framework) instead We will call you ... .. The IOC container should be placed in the Application's Composition root.. and it needs to instantiated as requested.. like wat nate mentioned

    .. For the Web Application the Composition root is Global.asax file where the u can use the override the startup events and There u can bind your Ninject to resolve the component

    0 讨论(0)
提交回复
热议问题