例:基本クラスで依存関係が必要な場合は、基本クラスでProperty Injectionを使用するのが適切ですか?
public abstract class BaseControler : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-)
public HomeController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
我々はすべて私たちは依存性が必要ときコンストラクタ・インジェクションを使用する必要があることを知っています。 オプションの場合は、依存関係プロパティ注入を使用することができます。
しかし、あなたの基本クラスだけが依存関係を必要とする場合はどうしますか?
コンストラクタインジェクションを使用すると、私の意見ではすべての派生クラスが汚染されます。
public abstract class BaseControler : Controller
{
readonly IUnitOfWork _unitOfWork;
public BaseControler(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-(
public HomeController(IUserRepository userRepository,
IUnitOfWork unitOfWork) : base(unitOfWork)
{
_userRepository = userRepository;
}
}
は、それが依存関係が唯一のベースクラスで必要とされている場合、基本クラスでプロパティインジェクションを使用するapproperiateですか?
私はあなたの要点を見ていますが、私が得る問題は多くのコンストラクタパラメータです。要点は、派生したクラスが基本クラスの代わりに依存関係に直接話していないことです。だから私は依存関係への直接呼び出しと依存関係への間接呼び出しを区別します。 – Rookian
@Rookian、複数のコンストラクタパラメータを持つ状況になった場合、それらの依存関係を集約してサービスのみをコンストラクタに挿入するサービスの作成を検討することがあります。 –
+1継承を超えて合成を優先します。あまりにも多くのコンストラクタパラメータで問題になる場合は、コンストラクタインジェクションではなく、継承ストラテジを責めます。 –