gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:31:55 25 4
gpt4 key购买 nike

我想设置 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com