关于Unity配置与单例的问题 - ASP.NET MVC3

时间:2012-02-15 18:23:12

标签: dependency-injection singleton unity-container constructor-injection

我们一直在使用Unity作为ASP.NET MVC3应用程序。配置仅在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. 我还应该注意什么?

1 个答案:

答案 0 :(得分:3)

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

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

  3. 是的,请勿使用XML配置容器。写一组约定。