asp.net-mvc - Ninject.MVC3、Nuget、WebActivator 天哪

标签 asp.net-mvc asp.net-mvc-3 ninject nuget webactivator

我想设置 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>();
   }
}

最佳答案

步骤:

  1. 创建新的 ASP.NET MVC 3 项目
  2. 从软件包控制台安装 NuGet 软件包:Install-Package Ninject.MVC3
  3. 在 HomeController 中:

    public class HomeController : Controller
    {
        private readonly ITestService _service;
        public HomeController(ITestService service)
        {
            _service = service;
        }
    
        public ActionResult Index()
        {
            ViewBag.Message = _service.GetMessage();
            return View();
        }
    }
    
  4. 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/

相关文章:

c# - 本地化与定制

c# - 异步操作完成,但结果未发送到浏览器

asp.net-mvc-3 - ViewBag/ViewData 生命周期

javascript - 使用 jquery 检查和取消选中具有动态 id 和类的复选框

c# - Ninject 'Get'方法可以缓存值吗?

asp.net-mvc - ASP.NET MVC WebApi : No parameterless constructor defined for this object

asp.net-mvc - ASP.Net MVC 在回发之间保留操作参数

asp.net-mvc - FontAwesome webfont 文件在运行 IIS 7.5 的 Windows 服务器上出现错误 404(未找到)

jquery - 单击事件未在 Bootstrap 单选按钮组内触发

asp.net - 仅当接口(interface)尚未绑定(bind)时,如何在 Ninject 中绑定(bind)接口(interface)?