【问题标题】:Using Ninject with objectdatasource in asp.net webforms?在 asp.net webforms 中将 Ninject 与 objectdatasource 一起使用?
【发布时间】:2013-03-25 14:37:24
【问题描述】:

我正在尝试在我的 asp.net webforms 应用程序中使用 Ninject 3。除了某些包含ObjectDataSource 的页面外,它工作正常,ObjectDataSourceSelect 方法会抛出NullReferenceException。我的代码如下:

Web.Admin.Grades.aspx:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
                    EnablePaging="true" TypeName="Web.Admin.Grades"
                    SelectMethod="GetData" SelectCountMethod="GetDataCount"
                    StartRowIndexParameterName="StartRowIndex" MaximumRowsParameterName="MaximumRows">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="SearchTxtBox" Type="String" Name="SearchKeyWord" PropertyName="Text" />
                    </SelectParameters>
                </asp:ObjectDataSource>

Web.Admin.Grades.cs:

[Inject]
public IGradesRepository _Grades { get; set; }

public IList GetData(string SearchKeyWord, int StartRowIndex, int MaximumRows)
{
    return _Grades.GetGrades(SearchKeyWord, StartRowIndex, MaximumRows);
}

public int GetDataCount(string SearchKeyWord)
{
    return _Grades.GetGradesCount(SearchKeyWord);
}

【问题讨论】:

  • Stacktrace 和一些关于它是如何连接起来的以及你尝试过的更多信息会有所帮助(不是很多人使用 ODS,如果你能半途而废地认识人们,他们可以提供帮助)跨度>
  • 我开始调试页面并进行了注入,但调用的 GetData 方法 _Grades 为空,发生了什么?
  • 我不知道 - 我不在那里 :) 为什么你认为 Ninject 被要求注入 Web.Admin.Grades ? Ninject 需要有理由接触您的实例 - 您如何配置 Ninject,您正在使用哪些模块。显示一些接线等。
  • Web.Admin.Grades.cs 是页面 Grades.aspx 的代码隐藏文件,就像我之前的评论一样,当页面被调用时,我开始调试并调用了属性注入,直到现在一切正常,但是然后调用 ObjectDataSource 的 Select 方法,在其中我使用注入的属性来获取数据,该属性似乎为 null,我不应该将 select 方法放在代码隐藏文件中还是我做错了什么?
  • 这是在您的代码明显出错之前发生的事情。你是如何引用 Ninject 的。你能链接到你用 ASP.NET 注入 Ninject 的方法吗?什么 ASP.NET 版本,什么 Ninject 版本。疯狂的猜测:您还没有告诉您的页面类从正确的基础派生。在您详细说明如何使用 Ninject 之前,我不会再做任何猜测

标签: c# asp.net ninject objectdatasource


【解决方案1】:

对不起,我解决了这个问题 如下

 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
                EnablePaging="true" TypeName="Domain.Abstract.IGradesRepository"
                SelectMethod="GetGrades" SelectCountMethod="GetGradesCount"   OnObjectCreating="ObjectDataSource1_ObjectCreating"
                StartRowIndexParameterName="StartRowIndex" MaximumRowsParameterName="MaximumRows">
                <SelectParameters>
                    <asp:ControlParameter ControlID="SearchTxtBox" Type="String" Name="SearchKeyWord"  PropertyName="Text" />
                </SelectParameters>
            </asp:ObjectDataSource>

和 Web.Admin.Grades.cs:

[Inject]
    public IGradesRepository _Grades { get; set; }
protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
    {
        e.ObjectInstance = _Grades;
    }

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2012-03-14
    • 2012-12-10
    • 2011-10-19
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多