相关疑难解决方法(0)

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

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

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

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

c# dependency-injection ninject ioc-container inversion-of-control

48
推荐指数
2
解决办法
1万
查看次数

IoC容器的用法; 特别是温莎

我认为这个问题的答案非常明显,以至于没有人对这方面的写作感到困扰,但是它已经很晚了,我真的无法理解这个问题.

我一直在阅读IoC容器(在这种情况下是Windsor),我很想念你如何从代码的各个部分与容器对话.

我得到DI,我一直在做穷人的DI(空构造函数调用带有默认参数实现的重载注入构造函数)一段时间,我可以完全看到容器的好处.但是,我错过了一条至关重要的信息; 每次需要服务时,你应该如何引用容器?

我是否创建了一个我传递的全局内容?当然不是!

我知道我应该这样称呼:

WindsorContainer container = new WindsorContainer(new XmlInterpreter());
Run Code Online (Sandbox Code Playgroud)

(例如)当我想加载我的XML配置时,但是我该如何处理容器?每次创建一个新容器之后是否通过一些内部静态majicks或其他方式持久保存加载的配置,或者每次都必须重新加载配置(我猜不是,或生命周期无法工作).

不理解这会阻止我弄清楚生命周期是如何工作的,并继续使用一些IoC的功能

谢谢,

安德鲁

c# castle-windsor inversion-of-control

28
推荐指数
1
解决办法
8066
查看次数

IoC,你把容器放在哪里?

我正在使用温莎城堡作为我正在研究的宠物项目.我开始注意到我需要在代码中的不同位置调用IoC容器来创建新对象.这种对容器的依赖使我的代码难以维护.

我用过两种解决方案来解决这个问题

我试图创建抽象工厂作为容器周围的包装器,我可以注入我需要创建对象的应用程序的部分.这有效,但有一些缺点,因为城堡很难将自己的容器注入依赖.所以我必须手工完成,这种方式会破坏IoC容器的整个目的.

我已经使用主应用程序控制器类来包装IoC容器并作为中央工厂/存储库工作.这是非常成功的,但是这个类太大了,就像一个中心神对象,几乎所有其他对象都有它的引用.

两种解决方案都有一些工作,但两者都有其缺点.所以我很好奇其他人是否有同样的问题,并找到了更好的解决方案.


编辑 问题不适用于依赖于对象B的对象A.这里我通常只使用构造函数注入,一切正常.有时我有类型A的对象需要在其生命周期中创建可变数量的其他类型的B对象.我不知道该怎么做.

@Blair Conrad:直到现在,维护问题并不严重.我有一些类依赖于容器对象调用container.Resolve <>.而且我不希望我的代码取决于我认为的基础设施.我还在尝试,所以我注意到在从这个项目的ninject切换到城堡时我必须更改很多代码.

@flowers:嗯.我喜欢你的拳头解决方案.它结合了我尝试过的两种解决方案.我认为我仍然在对象中思考太多而在界面/职责方面还不够.我尝试过专门建造的工厂,但我想让他们在幕后使用容器来创建对象,而我却不知道如何以一种干净的方式将容器转移到对象中.

oop dependency-injection castle-windsor inversion-of-control

24
推荐指数
3
解决办法
6018
查看次数