【问题标题】:What does this line mean in C#? [closed]这条线在 C# 中是什么意思? [关闭]
【发布时间】:2014-03-19 23:48:25
【问题描述】:

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

ServiceContainer.Resolve<MyClass>

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

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

【问题讨论】:

标签: c#


【解决方案1】:

从您粘贴的代码看来,您正在使用这个 IOC 容器

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

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

也许您可以编写一个单元测试来自己测试?

【讨论】:

    【解决方案2】:

    如果您谈论的是 GitHub 项目 XplatUtils。看看他的维基 https://github.com/jonathanpeppers/XPlatUtils/wiki/ServiceContainer

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

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

    【讨论】:

      【解决方案3】:

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

      阅读IoC.Resolve vs Constructor Injection

      【讨论】:

        【解决方案4】:

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

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

        通常您会发现映射的范围以及映射配置。 Here 你可以找到一个 Ninject 的例子

        【讨论】:

          猜你喜欢
          • 2017-03-21
          • 2012-02-16
          • 2012-05-04
          • 1970-01-01
          • 2015-01-27
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          相关资源
          最近更新 更多