2012-03-02 106 views
0

随着Ninject依赖注入容器自我约束,我可以进行自我约束的类似如下的方式:与温莎城堡在C#

MyClass mc = ninjectKernel.Get<MyClass>(); 

是否有在温莎城堡等效排序操作的?

+0

我不确定你指的是什么功能,但温莎的MyClass mc = container.Resolve ();'表面上看起来会做同样的事情。 – 2012-03-02 13:17:57

+0

Doh,很明显。谢谢。如果你想发布它,这看起来好像是对我的回答。为了使它起作用,我必须对它自己进行注册。 'container.Register(Component.For ().ImplementedBy ());' – 2012-03-02 13:23:47

+1

@JamesWiseman如果我记得没错的话,你可以节省一点自己的输入:'container.Register(Component.For ());'when “for”类型的参数是一个类,没有“由...实现”调用,Windsor足够聪明,可以将该类注册为实现者。 – phoog 2012-03-02 14:24:01

回答

2

温莎城堡的相应呼叫(除非我在NInject中缺少一些错综复杂的功能)

MyClass mc = container.Resolve<MyClass>(); 

而且,正如你在评论中指出的那样,你需要注册这个课程,让它在温莎工作。

+3

为了避免必须针对自己注册每个类,可以根据自己的基类在自己的某个程序集中注册多个类。例如,我使用以下来自我注册我所有的MVC控制器派生类: 'container.Register(Classes.FromThisAssembly()。BasedOn ().WithServiceSelf());' – 2013-04-19 00:33:43

2

按照约阿希姆伊萨克森的意见,这是我必须做的:

在安装程序:

container.Register(Component.For<MyClass>().ImplementedBy<MyClass>()); 

要解决:

MyClass mc = container.Resolve<MyClass>(); 
+0

您不需要'.ImplementedBy ()'。你只需要'.For ()',它就可以工作。 – gregsdennis 2016-10-06 00:19:19