私たちはDIコアとASPコアを使用する必要があるプロジェクトを持っています。 私はこれにはとても新しいので、質問があります。コンストラクタによる依存性注入パスパラメータ
public class HomeController : BaseController {
private IOrderService _orderService;
public HomeController(IOrderService orderService) {
_orderService = orderService;
}
public IActionResult Index() {
var orders = _orderService.GetMyOrders();
return View(orders);
}
}
コードは次のようになります:
public class OrderService : BaseService, IOrderService {
public OrderService(IDataContextService dataContextService) {
_dataContextService = dataContextService;
}
public List<Orders> GetMyOrders() {
var orders = // do my code here which works fine!;
// here i need some code do check orders for delivery so
DeliveryService deliveryService = new DeliveryService(_dataContextService);
// update my orders and return these orders
return orders;
}
}
public class DeliveryService : BaseService, IDeliveryService {
public DeliveryService(IDataContextService dataContextService) {
_dataContextService = dataContextService;
}
public void MyMethod() {
}
}
public class BaseService {
protected IDataContextService _dataContextService;
}
は、ほとんどすべての私のサービスがOrderServiceのとDeliveryServiceのようなコンストラクタを持って
は、私はこのようにHomeControllerという名前のコントローラを持っています。私の質問は、毎回_dataContextServiceを渡さなければならないのか、それとも依存関係のパターン内に解決策があるのでしょうか?
のオブジェクトのインスタンスを1つだけ作成されます
以下のようにあなたが
Startup
クラス内部ConfigureServices
方法でコンテキストやサービスを登録することができ、あなたは尋ねている場合コンストラクタインジェクションのほかに依存性インジェクションメソッドがありますか? – BradleyDotNETほとんどすべてのサービスは、同じパラメータを持つ同じコンストラクタを持っています。したがって、私がCustomerSerivceを使用し、CustomerService内で他のいくつかのサービスを呼び出す必要がある場合、それらをインスタンス化して、サービスのコンストラクタ内でパラメータを渡す必要があります。私はDIを使用するため、多分別の方法でサービスをインスタンス化できると思った。 –
あなたが探しているのはサービスコンテナです。サービスコンテナには、IXを実装するオブジェクトが必要な場合は、この型(X)を使用するか、またはX型のオブジェクトを返すこの関数を使用するというだけのクラスがあります。十分な情報を伝えると、そのままで。 Autofac、StructureMap、DryIocを見てください。このパターンには多くの実装があります。 –