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

Dependency injection 关于单例Unity配置的问题-ASP.NET MVC3,dependency-injection,singleton,unity-container,constructor-injection,Dependency Injection,Singleton,Unity Container,Constructor Injection,我们一直在为ASP.NET MVC3应用程序使用Unity。配置仅在web.config文件中完成。请参阅下面的示例,其中我们使用的是单例。我们正在使用构造函数注入。对于99%的类,我们不使用单例生存期属性。我们正在查看性能,发现同一个类的多个实例是为同一个请求多次构建的。我们意识到,不是每个请求生成3000个对象,而是可以将其减少到大约200个对象。我们可能有一个更大的设计问题,但那是另一天。我们正在考虑利用unity类配置中的大部分来使用singleton <typeAlias ali

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

<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>

问题:

  • 将生存期类型标记为singleton时,该实例是仅为特定用户共享还是为所有用户群共享
  • 通过将这些标记为单例,我们是否需要在方法上设置同步以避免用户同时执行多个请求的问题
  • 还有什么我应该知道的吗
  • 单个实例在容器实例中共享。您的应用程序中应该只有一个容器实例,因此实际上,单实例生存期创建了一个全局共享实例

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

  • 是的,不要使用XML来配置容器。而是编写一组约定