DI vs Singletons WebApi Aspnet

时间:2016-06-20 15:55:13

标签: c# asp.net asp.net-web-api

我们正在Asp.Net中设计webApi,我们实现了两种不同的设计模式,我对它们有些怀疑。

第一种方法是拥有我们实例化和使用的控制器的静态对象,当我们实例化它时,我们初始化该控制器具有的所有依赖项。

public class SingletonController: ApiController
{

     private static SingletonController m_singleton;

     public SingletonController()
     {
         if(m_singleton == null)
         {
             m_controllerDependency = Startup.DependenciesContainer.Get<MyDependency>();
             if(m_controllerDependency != null)
             {
                  //Subscribe events and code in relation with dependencies
                  m_singleton = this;                 
             }
          }
     }
}

就个人而言,我不喜欢这种做法。在第一个请求到达后,我们不断维护对象的实例。这很危险,因为我们可以创建一些在不同请求之间维护的临时对象,这可能不是我们想要的。此外,如果我们有两个同时发出的请求,我不知道会得到哪种行为。我假设在这种情况下我必须使用储物柜控制并发。

第二种方法是使用依赖注入包装我的DependenciesContainer类,如此处所述 http://www.asp.net/web-api/overview/advanced/dependency-injection

在这种情况下,我们在每个请求中创建控制器,我们不需要单例模式。我知道以前评论的缺点将被避免,但我不知道我们是否有使用这种模式或我必须考虑的事情的大利弊。

非常感谢。

编辑:我读过这个SO帖子,但我仍然有这些疑惑ASP.NET Web Api Dependency Injection - Singleton or not

0 个答案:

没有答案