我想设置Ninject做一个简单的测试,以及演示使用Nuget的易于安装.我想解决一个示例服务.
- public interface ITestService
- {
- string GetMessage();
- }
- public class TestService : ITestService
- {
- public string GetMessage() { return "hello world"; }
- }
我运行NuGet安装包NinjectMVC3 ….它很好地将NinjectMVC3.cs下载到我的App_Start文件夹,用一些WebActivator属性装饰,以使其全部加载.
接下来我在NinjectMVC3.RegisterServices方法中添加我的绑定:
- private static void RegisterServices(IKernel kernel)
- {
- kernel.Bind<ITestService>().To<TestServiceOne>();
- }
现在我想’使用’Ninjet来解决我的ITestService.
- public ActionResult Index()
- {
- //[Ninject,give me the service I need]
- ITestService service = ???
- ViewBag.Message = service.GetMessage();
- return View();
- }
还有另一部分设置Ninject?
我需要提供解析器吗?
感谢帮助»
** * * * * * * * * * * *更新:* * * * * * * * * * * * * * * * **
感谢您对“控制器构造函数”注入的响应.
简单地添加一个构造函数与ITestServcice作为参数…. BAMM !!!
- private ITestService _service;
- public HomeController(ITestService service)
- {
- _service = service
- }
- public ActionResult Index()
- {
- ViewBag.Message = _service.GetMessage();
- return View();
- }
- var kernel = ... // Go grab the kernel from ????? (thanks Judah).
- ITestService service = kernel.Get<ITestService>();
我可以看到NinjectMVC3类创建了内核,但并没有持有或公开一个引用,也没有找到一个明显的类/方法来获取内核.
我假设你是一个Ninject的方式来得到它,但不确定.
** * * * * * * * * * * *(最终)更新:* * * * * * * * * * * * * * * * **
再次感谢您的回答和意见….
更正:NinjectMVC3类创建内核,并且保留对作为其内核的“Bootstrapper”的引用.
所以我在App_Start / NinjectMVC3类中添加了一个’resolve’方法.
- public static class NinjectMVC3 /// created by the NinjectMVC3 NuGet Packagae
- {
- // add method to provide a global resolver.
- public static T Resolve<T>()
- {
- return bootstrapper.Kernel.Get<T>();
- }
- }
解决方法
将ITestService作为构造函数参数添加到控制器中:
- private ITestService service;
- public MyController(ITestService service)
- {
- this.service = service;
- }
- public ActionResult Index()
- {
- ViewBag.Message = this.service.GetMessage();
- return View();
- }
Ninject将自动将ITestService注入您的控制器.然后在Index方法中使用服务字段.
或者,如果你不希望Ninject注入到你的控制器构造函数中,你可以保持你创建的内核,然后在你的Index方法里面调用kernel.Get< ITestService>()来获取一个实例:
- public ActionResult Index()
- {
- var kernel = ... // Go grab the kernel we created back in app startup.
- ITestService service = kernel.Get<ITestService>();
- ViewBag.Message = service.GetMessage();
- return View();
- }