私は、すべてのデフォルトの依存関係がInitialize
とを介して自動的に注入されるアーキテクチャを持っていますOnActionExecuting
。これはすべて魅力のように機能します。これは、実行時に(テストではなく)、デフォルトのコントローラーアクティベーターがこれらのメソッドを呼び出して正しい具象オブジェクトを渡すためです。罰金。
Initialize
私の問題は、 andOnActionExecuting
メソッドに注入できないカスタム依存関係があるときに始まります。
例:
public class MyController
{
private IEmailSender emailSender = null;
}
さて..emailSender
私が何か他のものに設定しない限り、実行時にnullになります。この場合、私は次のようにそれほど大きくないものになってしまいます:
public class MyController
{
private IEmailSender emailSender = null;
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
if(this.emailSender == null)
this.emailSender = new SomeConcreteEmailSender();
}
}
ぶさいくな。私はこの「nullの場合、インスタンス化する」ことをしたくありません。
注入するためのより洗練された方法は、実行時にのみ呼び出され(テストではなく)、この「if」を実行する必要なしに自動的に注入IEmailSender
する独自の方法を作成することです。ただし、インジェクションが必要なコントローラーごとにカスタムを作成したくありません。ControllerActivator
IEmailSender
ControllerActivator
そうは言っても、ASP.NETコントローラーのカスタム依存性注入に関しては何が標準と見なされますか?