我刚接触C#,并试图在项目期间通过代码进行调试。在很多地方,我可以看到
ServiceContainer.Resolve<MyClass>
我只是想知道它是否每次都返回相同的对象,或者每次调用它时都会创建一个MyClass的新对象?
我有两个类classA和classB。分别放在命名空间A和B中。命名空间A依赖于B但我需要classB中的classA对象。我不能在A(循环依赖)中创建B的依赖关系。如何在ClassB中创建ClassA的对象?我希望我很清楚
答案 0 :(得分:2)
它将返回什么取决于底层IoC(控制反转)配置。您可以配置(大多数)IoC容器返回,可以是同一个实例,每个Resolve一个实例,每个线程一个实例,每个http请求一个实例等。
还有几种方法可以指定MyClass如何映射到AnotherImplementationOfMyClass(通常是MyClass是一个接口)。
通常,您将找到映射的范围以及映射配置。 Here你可以找到Ninject的例子
答案 1 :(得分:2)
IoC.Resolve&LT;&GT;是服务定位器模式的一个示例。
答案 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非常相似。
注册是显式的,可以通过静态类访问,所有注册都是单例。