0

この質問は奇妙に思えるかもしれませんが、コンストラクターの署名を修正する必要がある場合が実際にあります。

たとえば、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...); 
}

IBusinessModelおよびIAppContextシングルトンですが、追加のパラメーターは一時的です。

呼び出し元だけが一時的なパラメーターの値を知っている場合、ファクトリがこれらのパラメーターについて知る必要はありません。

4

1 に答える 1

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...)
   {
   }
}
于 2013-02-19T20:17:17.137 に答える