加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Ninject.MVC3,Nuget,WebActivator哦我的

发布时间:2020-12-15 23:41:23 所属栏目:asp.Net 来源:网络整理
导读:我想设置Ninject做一个简单的测试,以及演示使用Nuget的易于安装.我想解决一个示例服务. public interface ITestService{ string GetMessage();}public class TestService : ITestService { public string GetMessage() { return "hello world"; }} 我运行NuG
我想设置Ninject做一个简单的测试,以及演示使用Nuget的易于安装.我想解决一个示例服务.
public interface ITestService
{
    string GetMessage();
}
public class TestService : ITestService 
{
    public string GetMessage() { return "hello world"; }
}

我运行NuGet安装包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类创建内核,并且保留对作为其内核的“Bootstrapper”的引用.

所以我在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>();
   }
}

解决方法

将ITestService作为构造函数参数添加到控制器中:
private ITestService service;

public MyController(ITestService service)
{
   this.service = service;
}

public ActionResult Index()
{
  ViewBag.Message = this.service.GetMessage();
  return View();
}

Ninject将自动将ITestService注入您的控制器.然后在Index方法中使用服务字段.

或者,如果你不希望Ninject注入到你的控制器构造函数中,你可以保持你创建的内核,然后在你的Index方法里面调用kernel.Get< ITestService>()来获取一个实例:

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();
}

看看Ninject dependency inject for controllers in MVC3.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读