ninject.mvc3,nuget,web活化器哦,我的
-
24-10-2019 - |
题
我想设置ninject进行简单的测试,并使用nuget演示易于设定的测试。我想解决示例服务。
public interface ITestService
{
string GetMessage();
}
public class TestService : ITestService
{
public string GetMessage() { return "hello world"; }
}
我运行Nuget install-package 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还有另一个部分吗?我需要提供排序器吗?
我需要解决iTestService的代码。
感谢帮助»
** * * * * * * * * * * * 更新: * * * * * * * * * * * * * * * * **
感谢您对“控制器构造器”注入的出色反应。只需将构造函数与iTestServcice添加为param .... 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类创建内核,但不会持有或展示对它的参考,也无法找到“获取内核”的明显类/方法。
我认为您是获得它的一种方法,但不确定。
** * * * * * * * * * * * * *(最终)更新: * * * * * * * * * * * * * * * * * **
再次感谢您的答案和评论。
校正:NinjectMVC3类创建内核,并确实对“ Bootstrapper”的引用,它是IKERNEL上的Ikernel。
因此,我在app_start/ninjectmvc3类中添加了“分解”方法...工作得很好。
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注入您的控制器。然后使用索引方法中的服务字段。
或者,如果您不希望nInject注入控制器构造函数,则可以在创建的内核周围,然后在索引方法中,呼叫kernel.get。u003CITestService> ()获取一个实例:
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(); }
其他提示
脚步:
- 创建一个新的ASP.NET MVC 3项目
- 从软件包控制台安装Nuget软件包:
Install-Package Ninject.MVC3
在Homecontroller中:
public class HomeController : Controller { private readonly ITestService _service; public HomeController(ITestService service) { _service = service; } public ActionResult Index() { ViewBag.Message = _service.GetMessage(); return View(); } }
在
App_Start/NinjectMVC3.cs
:private static void RegisterServices(IKernel kernel) { kernel.Bind<ITestService>().To<TestService>(); }