我想设置 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 作为参数的构造函数 .... 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 类创建内核,并持有对“引导程序”的引用,它作为一个 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>();
}
}