【发布时间】:2013-12-13 07:02:21
【问题描述】:
我对以下代码 sn-p 有 2 个问题:
public class Provider
{
private static Provider _instance;
/* Internals ommited. */
public static Provider Instance
{
get { return _instance ?? (_instance = new Provider()); }
}
}
public class Consumer
{
private readonly Provider _dependency;
public Consumer()
: this(Provider.Instance)
{
}
public Consumer(Provider dependency)
{
_dependency = dependency;
}
/* Internals ommited. */
}
1) 第二个构造函数使用依赖注入模式,第一个在做什么?服务地点?
2) 提供这种使用默认实例的重载 ctor 是常见的做法吗?还是有更好的方法来做这样的事情? (我想避免实现包装类)。
【问题讨论】:
-
这是一个单身人士。 en.wikipedia.org/wiki/Singleton_pattern
-
@kenny,Provider 引用了单个实例,但不是完整的单例。 Provider 应该将其默认构造函数定义为私有,否则任何人都可以通过说
new Provider()创建一个 Provider 实例。此外,Consumer 的默认构造函数使用 Provider 中定义的单个实例,但这并不意味着所有 Consumer 实例都会引用该实例。由于第二个构造函数,可以通过不同的提供者创建一个新的消费者。事实上,也有人可以扩展 Provider 并使用子类的实例创建 Consumers -
@JonathanMoralesVélez 是的,这是一个糟糕的单身人士。
标签: c# .net dependency-injection service-locator