依存性注入を使用しています。次のような OrderService クラスがあるとします。
public class OrderService{
public OrderService(
IOrderValidator validator
, IOrderRepository repository
, IOrderNotificator notificator){
//assign global fields
}
public void SubmitOrder(Order ord){
if(validator.IsOrderValid(ord)){
repository.InsertNew(ord);
notificator.Notify(ord);
}
}
}
TypeAOrderService
ここで、次のようなコンストラクターで宣言されたコンポーネントを使用して、OrderService によって継承されるように、たとえばファサード クラスを作成することにします。
public class TypeAOrderService : OrderService{
public TypeAOrderService() : base(
new OrderValidator(),
new OrderRepository(),
new OrderNotificator()) { }
}
(注入されたコンポーネントの複雑さを伴う実装はここでは重要ではありませんが、adapter pattern
継承を置き換えることも許容されることに注意してください)。
コンポジションルートで依存関係を定義していないため、ここには欠点があるかもしれません。しかし、状況によってはそれが受け入れられるかどうかは疑問です。特にframework component
、DI コンテナーにアクセスしてフレームワークを使用し、自分で解決するのはかなり奇妙です。
アップデート:
コメントで述べたように、現在 IOC コンテナーは使用していません。私の見解では、フレームワークで IOC コンテナーを使用するのは奇妙です。これは、フレームワークを使用するすべてのアプリケーションが IOC コンテナーを使用する必要があることを意味するためです。私の見方が間違っている場合は、遠慮なく訂正してください。
私がフレームワークの例として挙げているのはSystem.Windows.Forms.Form
、IOC コンテナーを使用せず、依存関係を判別しない場合などです。