1

我们一直在为我们的 ASP.NET MVC3 应用程序使用 Unity。配置仅在 web.config 文件中完成。请参见下面的示例,我们使用单例。我们正在使用构造函数注入。对于我们 99% 的课程,我们不使用单例生命周期属性。我们正在查看我们的性能,发现同一类的多个实例正在为同一请求构建多次。我们意识到,与其为每个请求生成 3000 个对象,不如将其减少到大约 200 个对象。我们可能有一个更大的设计问题,但那是另一天。我们正在考虑制作大量的统一类配置来使用单例。

<typeAlias alias="singleton"
           type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<type type="ITMSLogger" mapTo="TMSLogger">
    <lifetime type="singleton" />
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
    </typeConfig>
</type>

问题:

  1. 将生命周期类型标记为单例时,该实例是仅针对特定用户还是所有用户群共享?
  2. 将这些标记为单例后,我们是否需要在方法上设置同步以避免用户一次执行多个请求的问题?
  3. 还有什么我应该注意的吗?
4

1 回答 1

3
  1. 单个实例在容器实例之间共享。您的应用程序中应该只有一个容器实例,因此实际上,单例生命周期会创建一个全局共享实例。

  2. 是的,所有单例都可能被许多线程访问,因此它们必须是线程安全的。

  3. 是的,不要使用 XML 来配置您的容器。改为编写一组约定。

于 2012-02-15T18:45:40.840 回答