我有一个Configurator
类,为了完成它的工作,必须Context
通过接口接收一个对象:
public class Configurator : IContextAware
{
private IContext _context;
//property setter defined by the IContextAware interface
public IContext Context { set { _context = value; } }
// use _context object in other methods here ...
}
我计划编写许多Configurator
类型,它们都需要以_context
相同的方式初始化它们的字段。我的第一个想法是“为什么不激怒互联网上的每个程序员并使用继承”?
public class ContextInitializer: IContextAware
{
// field to hold the injected context
protected IContext _context;
//property setter defined by the IContextAware interface
public IContext Context { set { _context = value; } }
}
public class Configurator : ContextInitializer
{
// use _context object here ...
}
这样,我编写的任何其他需要 Context 对象的类都可以直接从 ContextInitializer 继承,并立即使用 Context 对象。
优点:保证一致的初始化,没有分散注意力,每个类中的重复初始化代码
缺点:实现继承是邪恶的!,..嗯,配置器不能从任何其他类继承.. ??
我应该澄清一种或另一种方式,配置器必须实现IContextAware
接口。此外,该类必须具有默认/无参数构造函数,因此构造函数依赖注入在这里不是一个选项。
有人可以建议如何使用组合来实现相同的好处,但设计更灵活,和/或描述上述继承解决方案的真正缺点吗?谢谢!
PS这是改编自Spring.Net CodeConfig,如果有人好奇的话。