这条线在C#中意味着什么?

时间:2014-02-19 14:51:43

标签: c#

我刚接触C#,并试图在项目期间通过代码进行调试。在很多地方,我可以看到

ServiceContainer.Resolve<MyClass>

我只是想知道它是否每次都返回相同的对象,或者每次调用它时都会创建一个MyClass的新对象?

我有两个类classA和classB。分别放在命名空间A和B中。命名空间A依赖于B但我需要classB中的classA对象。我不能在A(循环依赖)中创建B的依赖关系。如何在ClassB中创建ClassA的对象?我希望我很清楚

4 个答案:

答案 0 :(得分:2)

它将返回什么取决于底层IoC(控制反转)配置。您可以配置(大多数)IoC容器返回,可以是同一个实例,每个Resolve一个实例,每个线程一个实例,每个http请求一个实例等。

还有几种方法可以指定MyClass如何映射到AnotherImplementationOfMyClass(通常是MyClass是一个接口)。

通常,您将找到映射的范围以及映射配置。 Here你可以找到Ninject的例子

答案 1 :(得分:2)

IoC.Resolve&LT;&GT;是服务定位器模式的一个示例。

阅读IoC.Resolve vs Constructor Injection

答案 2 :(得分:2)

从您粘贴的代码看起来您​​正在使用此IOC容器

https://github.com/jonathanpeppers/XPlatUtils/wiki/ServiceContainer

从该文档中可以看出“所有注册都是单例”,因此每次调用它时都会获得相同的对象。

也许你可以写一个单元测试来自己测试一下?

答案 3 :(得分:1)

如果您正在谈论GitHub项目XplatUtils。看看他的Wiki https://github.com/jonathanpeppers/XPlatUtils/wiki/ServiceContainer

ServiceContainer是一个简单的IoC容器,与XNA或MonoGame中的Game.Services非常相似。

注册是显式的,可以通过静态类访问,所有注册都是单例。