当前位置:  开发笔记 > 编程语言 > 正文

NInject:你在哪里保留对内核的引用?

如何解决《NInject:你在哪里保留对内核的引用?》经验,为你挑选了2个好方法。

我在一个新的Web应用程序上使用NInject,有两件事我不清楚:

    我是否需要保持对内核(Session/App变量)的引用以确保GC不收集我的所有实例?例如,如果我指定.Using()然后收集Kernel对象,那么我的所有"单身人士"都不是被收集的吗?

    如果我确实需要保持对Kernel对象的引用,我如何允许传入WithArguments()的参数改变或者这是不可能的.

Nate Kohari.. 29

确实,你不想传递内核.通常,在Web应用程序中,我将内核存储在HttpApplication中的静态属性中.如果需要对内核的引用,则只需公开IKernel类型的依赖项(通过构造函数参数或属性),Ninject将为您提供对激活该类型的内核的引用.

如果在绑定上使用WithArguments(),它们将用于所有激活.如果您使用IParameters,它们将仅用于该激活.(但是,如果您正在激活的服务具有像Singleton这样的可重用行为,即使您传递了不同的IParameters,也不会重新激活它.)



1> Nate Kohari..:

确实,你不想传递内核.通常,在Web应用程序中,我将内核存储在HttpApplication中的静态属性中.如果需要对内核的引用,则只需公开IKernel类型的依赖项(通过构造函数参数或属性),Ninject将为您提供对激活该类型的内核的引用.

如果在绑定上使用WithArguments(),它们将用于所有激活.如果您使用IParameters,它们将仅用于该激活.(但是,如果您正在激活的服务具有像Singleton这样的可重用行为,即使您传递了不同的IParameters,也不会重新激活它.)



2> Mauricio Sch..:

这是开始使用IoC容器时常见的陷阱.看到这个相关的问题.

简而言之:

通过你的容器是不好的做法(去过那里,做到了,真的很疼)

如果您确实需要直接调用容器,首先考虑抽象到注入的工厂,然后作为最后一个资源考虑使用静态网关到容器

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有