我想设置 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 方法中添加绑定(bind):
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 所需的代码是什么。
感谢帮助»
** * * * * * * * * * * * * 更新: * * * * * * * * * * * * * * * * * **
感谢您对“ Controller 构造函数”注入(inject)的精彩回应。 只需添加一个以 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”的引用,它作为其上的 IKernel。
所以我向 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>();
}
}
最佳答案
步骤:
- 创建新的 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>(); }
关于asp.net-mvc - Ninject.MVC3、Nuget、WebActivator 天哪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315028/