我们正在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