Ninject 入门

2023-11-21

我在 上观看了 Ninject 的前 2 个初学者教程Dimecasts.net。现在,我想在 ASP.NET MVC 3 中使用 Ninject 2.2。我想要一个带有模拟模型的视图。调用我的服务时,我得到的对象引用未设置为对象的实例;

    public class HomeController : Controller
    {
        private readonly IMilestoneService _service;

        public HomeController()
        {
        }

        HomeController(IMilestoneService service)
        {
            _service = service;
        }

        public ActionResult Index()
        {
            ViewBag.Message = "Change Request System";

            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        #region Partial views
        public ActionResult Milestone()
        {
            var result = _service.GetMileStones();//OBJECT REF ERROR
            return View(result);
        }
        #endregion
    }

//####GLOBAL.ASAX
//By using the NinjectHttpApplication, it automatically takes care of controllers, starting up mvc, etc.
//Ninject.Web.Mvc
public class MvcApplication : NinjectHttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        //StartNinject();
    }

    #region Inversion of Control

    protected override IKernel CreateKernel()
    {
        return Container;
    }

    static IKernel _container;
    public static IKernel Container
    {
        get
        {
            if (_container == null)
            {
                _container = new StandardKernel(new SiteModule());
            }
            return _container;
        }
    }

    internal class SiteModule : NinjectModule
    {
        public override void Load()
        {
            //Set up ninject bindings here.
            Bind<IMilestoneService>().To<MileStoneService>();
        }
    }
    #endregion
}

我正在使用 Razor,他是里程碑式的部分视图

@foreach (var item in Model)
{
    <div>item.Name</div>
}

最后是主页视图索引

@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
   @Html.Action("Milestone");
</p>

Edit2013年11月20日

请注意,Ninject 自此发布了 2.0 版本。这些变化在他们的网站上有很好的概述site。值得注意的是StandardModule is now NinjectModule和命名空间Ninject.Core不复存在。我能够用它来替换它Ninject.


您的控制器类有问题,具有依赖项的构造函数是private。你的控制器应该是这样的:

public class HomeController : Controller
{
    private readonly IMilestoneService _service;

    public HomeController(IMilestoneService service)
    {
        _service = service;
    }

}

甚至不包含公共无参数构造函数,它甚至无效,你的类needs对功能的依赖。

事实上,我还在构造函数中插入了针对该依赖项的空检查,以确保我的类在构造时有效:

public class HomeController : Controller
{
    private readonly IMilestoneService _service;

    public HomeController(IMilestoneService service)
    {
        _service = service;
        Enforce.NotNull(() => _service); // lambda to auto-magically get variable name for exception
    }

}

您的 MvcApplication 类也可能存在问题。

代替protected void Application_Start(),有一个不同的函数可以覆盖,protected override void OnApplicationStarted()

这是您对设置路由的调用应该进行的地方:

public class MvcApplication : NinjectHttpApplication
{

    public override void Init()
    {
        base.Init();
        Mappers.Initialize();
    }

    protected override Ninject.IKernel CreateKernel()
    {
        return Ioc.Initialize();
    }

    protected override void OnApplicationStarted()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes) 
    {
        Routing.RegisterRoutes(routes);
        //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    }
}

当然,如果您已经打电话Application_Start也不错,不过我在OP里没看到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ninject 入门 的相关文章

  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • C - 计算文件中的单词、字符和行数。字符数

    我必须用 C 编写一段代码 输出给定文件中的字符数 行数和单词数 任务看起来很简单 但我现在真的不确定出了什么问题 所以 这是代码 include
  • 线程独占数据:如何存储和访问?

    NET 中是否有可能将对象实例绑定到线程的当前执行上下文 这样在代码的任何部分我都可以做类似的事情CurrentThread MyObjectData DoOperation 并确保我访问特定于线程的数据 谢谢 你可以看一下线程静态属性 h
  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • OpenCV SVM 给出奇怪的预测结果

    我对 OpenCV 和支持向量机都很陌生 我想使用 SVM 训练具有两个标签的数据集 然后预测给定集合的标签 我当前的集合包含大约 600 行 具有相等的类分布 1 为 300 行 1 为 300 行 包含 34 列 这是我当前用于设置 O
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 当分配返回 0 时,具有空异常规范的运算符 new 调用构造函数

    我有以下声明 void operator new size t s PersistentMemory m throw return m gt allocatePersistentMemory s 我正在测试启动时的内存耗尽 这会导致m gt
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin

随机推荐

  • 中断到我的应用程序的链接

    我有个问题 我使用下面的代码来中断我的应用程序的链接
  • Azure COM 对象

    我正在尝试将我在带有 IIS 的服务器上托管的网站移至 Azure 网站 我正在使用 COM 对象 但我不确定是否可以注册它 我发现一些帖子谈论上传 dll 并在启动时注册它 但该文章似乎丢失了 这可能吗 我在 Azure 上注册旧版 CO
  • Android 如何等待代码完成后再继续

    我有一个方法叫做hostPhoto 它基本上将图像上传到网站并检索链接 然后我有另一种方法来发布网站链接 现在我使用这种方法的方式是这样的 String link hostPhoto returns a link in string for
  • .NET Core将本地API表单数据发布请求转发到远程API

    我有一个 AJAX 表单 它将表单数据发布到本地 API url api document 它包含一个文件和一个自定义 ID 我们只想获取准确收到的请求并将其转发到远程 API example com 8000 document uploa
  • Tastypie - 未找到嵌套资源字段

    我有这个代码 api model class VideoResource ModelResource class Meta queryset Video objects all include resource uri False reso
  • 使用 pgx 在 GO 中的 Postgres 中批量插入

    我正在尝试在 go 中的 db 中批量插入键 这是代码关键结构 type tempKey struct keyVal string lastKey int 测试键 data tempKey keyVal abc lastKey 10 key
  • 将集合转换为数组的最简单方法?

    假设我们有一个Collection
  • 使用 xpath 在 Java 中解析带有命名空间的 XML

    我正在尝试用 java 解析 SOAP 请求 但代码没有返回任何节点 这是代码任何人都可以发现错误 String xml
  • 字符串操作与正则表达式

    我们经常被告知正则表达式很慢 应该尽可能避免 然而 考虑到自己进行一些字符串操作的开销 不是谈论算法错误 这是另一回事 特别是在PHP or Perl maybe Java 是什么limit 在什么情况下我们可以考虑字符串操作是更好的选择
  • ASP.Net MVC 5 子目录捆绑问题

    我在 ASP Net MVC 5 项目中看到捆绑的奇怪行为 当我明确声明 BundleConfig cs 文件中的所有文件时 我的项目工作得很好 如下所示 bundles Add new ScriptBundle bundles app I
  • 将单元格添加到 iOS 中 UITableView 的底部

    我正在使用带有情节提要的 xcode 4 2 来创建 iphone 应用程序 当我按下右上角的编辑按钮时 我希望有选项来删除现有行并在顶部看到额外的单元格 带有绿色 图标 这将允许我添加新单元格 我有一个正在填充的数组viewDidLoad
  • ThreadPoolExecutor 队列满时会阻塞?

    我正在尝试使用 ThreadPoolExecutor 执行大量任务 下面是一个假设的例子 def workQueue new ArrayBlockingQueue
  • 将 struct 转换为 int

    考虑到 让我添加一个代码片段来澄清 typedef struct uint8 t field 5 uint8 t field2 4 and so on some struct t some struct t some struct init
  • UITextField:textRectForBounds:与。编辑矩形边界:

    和有什么区别UITextField其文本的矩形与可编辑文本的矩形 我只想移动文本字段内显示文本的位置 我应该用相同的确切实现来重写这两种方法吗 UITextField 类参考 文本矩形边界 返回文本字段文本的绘图矩形 编辑矩形边界 返回可以
  • 多点连接:接受邀请(使用内置浏览器 VC)

    我试图关注 WWDC 演讲了解多点连接框架 经过多次错误启动后 浏览器会显示对等方 并发出邀请 但是当我在对等设备上按 接受 时 浏览器一直显示 正在连接 没有结束 我以为MCBrowserViewController处理了逻辑 我可以放松
  • lambda 表达式和事件处理程序?

    有人向我提到 c 支持使用 lambda 表达式作为事件处理程序 有人可以与我分享一些这方面的参考吗 最好有代码片段 您可以使用 lambda 表达式构建匿名方法 该方法可以附加到事件 例如 如果您制作一个带有Button and a La
  • 如何自定义谷歌课堂共享按钮的外观和感觉

    目前 它看起来像一个旁边没有文字的正方形 我们希望在不干扰图标的情况下自定义外观和感觉 当然以匹配我们的其他按钮 已经尝试将样式添加到div已转换为共享图标 但到目前为止尚未成功 div class btn btn blue Google
  • 在 data.frame 中的两列之间添加(插入)一列

    我有一个包含 a b 和 c 列的数据框 我想在 b 和 c 之间添加一个新列 d 我知道我可以通过使用在末尾添加 dcbind但我怎样才能insert它在两列之间吗 我建议你使用该功能add column 来自tibble包裹 libra
  • 取消嵌套或取消切割包含不同长度列表的数据帧

    我有一个数据框 其中有几列 其中包含我想要的列表列unnest or unchop 但是 它们的长度不同 所以产生的错误是Error No common size for 这是一个表示 显示什么有效 什么无效 library tidyr l
  • Ninject 入门

    我在 上观看了 Ninject 的前 2 个初学者教程Dimecasts net 现在 我想在 ASP NET MVC 3 中使用 Ninject 2 2 我想要一个带有模拟模型的视图 调用我的服务时 我得到的对象引用未设置为对象的实例 p