我有一个spec translator
,如下所示。
//all specifications implement this base class
public abstract class SpecBase
{
public abstract void Translate(IContext context);
}
//spec translator implementation
public interface ISpecTranslator
{
void Translate(IContext context);
}
我需要注入SpecTranslator
构造函数的依赖。我有两种表达依赖的方式。
解决方案 1
public class SpecTranslator:ISpecTranslator
{
IList<SpecBase> specs;
public SpecTranslator(IList<SpecBase> specs)
{
this.specs = specs;
}
}
请注意IList<SpecBase>
目前使用工作,但似乎解决方案 2 提供了更多保护。
解决方案2:
public class SpecTranslator:ISpecTranslator
{
ISpec spec;
public SpecTranslator(ISpec spec)
{
this.spec = spec;
}
}
public interface ISpec
{
IList<SpecBase> specs {get;}
}
ISpec
但是,使用构造函数依赖注入的实现也有同样的问题。
关于这两种解决方案或其他解决方案的优缺点的任何想法?