以下で参照されているチュートリアルには、コントローラーがあります。
public class HomeController : Controller
{
MvcNinjectExample.Logging.ILogger _logger;
public HomeController(MvcNinjectExample.Logging.ILogger logger)
{
_logger = logger;
}
public ActionResult Index()
{
_logger.LogMessage("Running index page!");
return Content("Message logged");
}
}
次のバインディングに従って...
public static void RegisterServices(IKernel kernel)
{
kernel.Bind<ILogger>().To<TextFileLogger>();
}
...がインスタンス化されるたびにTextFileLogger()HomeController
が呼び出されます。正しい?
チュートリアルでは、次のように述べています。
これを変更して、前の例の 1 つのように EventFileLogger 実装を使用する場合は、実装を作成し、ILogger を実装させ、カーネル バインディングに登録するだけで済みます。それを使用するコントローラへの変更は必要ありません。
私の質問は:
という名前の新しいクラスを作成し、EventFileLogger()
それILogger
から のようなバインディングを作成した場合、Ninjectは がインスタンス化されたときに他のバインディングではなくkernel.Bind<ILogger>().To<EventFileLogger>();
新しいバインディングを使用することをどのように認識しますか?EventFileLogger()
TextFileLogger()
HomeController
参考文献 http://stevescodingblog.co.uk/dependency-injection-beginners-guide/