为什么没有办法在C#中约束构造函数的签名?

时间:2013-02-19 19:31:32

标签: c# constructor

这个问题看起来很奇怪,但我们确实遇到过需要修复构造函数签名的情况。

例如,我想要它用于在DI中解析的依赖项。如果构造函数被扩展并且需要更多参数,其中一些参数依赖于上下文,那我就麻烦了 如果无法解决依赖关系,当然DI容器会抛出异常,但这不是我想的最佳方式。

我只是重构我们的应用程序,并了解最初计划成为DI的良好候选者的内容现在因为故意构造函数扩展而无法理解后果而被破坏。阻止它的唯一方法就是开发人员之间的惯例 语言支持非常有用,但C#和Java都没有它。

所以我觉得应该有一些理由没有实现这个功能......为什么?

以下是我们工厂的样子:

public class EntityBase : IEntity
{
   public EntityBase(IBusinessModel model, IAppContext context)
   {
   }
}

public class DescendatnEntity : EntityBase, IDescendatnEntity
{
   public DescendatnEntity(IBusinessModel model, IAppContext context, ...additional params...)
   {
   }
}

public interface IEntitiesFactory
{
     IEntity GetBaseEntity();
     IDescendantEntity GetDescendantEntity(...those additional params...); 
}

IBusinessModelIAppContext单身人士,而其他参数是短暂的。

如果只有来电者知道瞬态参数的值,工厂就不需要了解这些参数。

1 个答案:

答案 0 :(得分:0)

您可以使用构造函数链来提供默认实现。

public class DescendantEntity : EntityBase, IDescendatnEntity
{

   public DescendantEntity(IBusinessModel model, IAppContext context, ...additional params...)
   {
   }
   public DescendantEntity(IBusinessModel model, IAppContext context)
       this(model, context, ...additional params defaults...)
   {
   }
}