MvcのWeb拡張機能を使用してDynamoIoCを試していますが、Global.asaxを派生させるカスタムHttpApplicationを作成するのに優れた作業を行っていることがわかります。しかし、何かが足りないようです。
コントローラーでDIを実行したいのですが、通常の「コントローラーにはパラメーターなしのコンストラクターが必要です」という問題が発生します。
これは、global.asax(から派生DynamoMvcAndWebApiApplication
)で行うことです。
protected override void RegisterDependencies(Dynamo.Ioc.IIocContainer container)
{
container.Register<ILogger, FakeLogger>();
}
それから私のコントローラー:
public class HomeController : Controller
{
private readonly ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
public ActionResult Index()
{
logger.Log("test");
return View();
}
}
これにより、「パラメーターなしのコンストラクターエラーは発生しません」というメッセージが表示されます。DynamoのWeb拡張機能は、DIを機能させるために必要なものはすべてすでに処理していると思いました。
パラメータなしのコンストラクタを追加すると呼び出されますが、ILoggerはnullになり、アクションメソッドでNullReferenceExceptionが発生します。
ControllerFactoryを実装する必要があると考えましたが、必須の場合はMVCの他のすべてのものと一緒に提供されると思いました。そのため、提供されているものを誤用していると思います。
このシナリオでDIを機能させる方法を誰かが知っているかどうか知りたいです。ありがとう。