十分に文書化されています 、サービスに依存性を注入する方法があります。
質問:しかし、ASP.NET Core 2.0でシステムのDIメカニズムを使用することは(すでに)可能ですか自動的にサービスを注入しますメソッドまたはプロパティに?
補足:PHP-Symfonyでは、このパターンは セッターインジェクション と呼ばれます。
例:プロジェクト内のすべてのコントローラーに共通のMyBaseController
クラスがあり、サービス(UserManagerサービスなど)が必要だとします。 MyBaseController
に挿入され、後ですべての子コントローラーでアクセスできます。コンストラクターインジェクションを使用して、子クラスにサービスをインジェクトし、それをbase(userManager)
を介して親に渡すことができます。しかし、すべてのコントローラーのすべての子コンストラクターでこれを実行する必要があるのは、かなり面倒です。
だから私は次のようにMyBaseController
にセッターを置きたいと思います:
public abstract class MyBaseController : Controller
{
public UserManager<User> userManager { get; set; }
// system should auto inject UserManager here
public void setUserManager(UserManager<User> userManager) {
this.userManager = userManager;
}
}
...したがって、依存関係を親に渡すためだけに、すべての子コンストラクターで次のことを行う必要はありません。
public class UsersController : MyBaseController
{
public ChildController(UserManager<User> userManager) : base(userManager) {}
更新:与えられた答え ここ は私が達成したいことですが、質問はASP.NET Core 1.0に尋ねられました、私はASP.NET Core2.0にソリューションが追加されているかどうかに興味があります。
一般に、コンストラクター以外のDIは少しアンチパターンと見なされるため、避けることをお勧めします。これについては、この 関連する質問 で適切な議論があります。
AspnetコアのデフォルトのMicrosoft.Extensions.DependencyInjectionコンテナーでは、答えはノーですが、この機能が本当に必要であることが確実な場合は、 autofac(プロパティインジェクションあり) のようなより強力なものに交換できます。 。