Asp.net mvc 3 如何使用带有ASP.NET MVC3的Ninject 3.0将对象注入非控制器对象

Asp.net mvc 3 如何使用带有ASP.NET MVC3的Ninject 3.0将对象注入非控制器对象,asp.net-mvc-3,webforms,ninject,httpmodule,Asp.net Mvc 3,Webforms,Ninject,Httpmodule,我有一个MVC3项目,我正在使用Ninject将实体框架上下文注入其中。我正在使用Ninject包(3.0.0.15)、Ninject.MVC3(3.0.0.6)和Ninject.Web.Common(3.0.0.7)。一切都非常好,除了我尝试将代码注入WebForms隐藏文件时。我假设这是因为我没有正确地连接某些东西,但不确定如何连接它。Ninject也不能在Razor实例化的文件中工作 以下是我的代码,用于我的代码隐藏: [Inject] public IDbContext DataCont

我有一个MVC3项目,我正在使用Ninject将实体框架上下文注入其中。我正在使用Ninject包(3.0.0.15)、Ninject.MVC3(3.0.0.6)和Ninject.Web.Common(3.0.0.7)。一切都非常好,除了我尝试将代码注入WebForms隐藏文件时。我假设这是因为我没有正确地连接某些东西,但不确定如何连接它。Ninject也不能在Razor实例化的文件中工作

以下是我的代码,用于我的代码隐藏:

[Inject]
public IDbContext DataContext { get; set; }
上下文属性每次都显示为null。在我升级到Ninject 3.0之前,它工作得很好

我的启动方法如下:

public static void Start()
{
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
    Bootstrapper.Initialize(CreateKernel);
}

关于如何让Ninject将DataContext注入WebForm和Razor实例化的类中,您有什么想法吗?

要想实现这一点,您需要安装
Ninject.Web
NuGet(撰写本文时的最新版本是3.0.0.5)然后让您的Web表单从
Ninject.Web.PageBase
派生,而不是从
System.Web.UI.Page

public partial class WebForm1 : Ninject.Web.PageBase
{
    [Inject]
    public IDbContext Ctx { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

还请注意,我使用了
Ctx
作为属性名,因为您隐藏的
System.Web.UI.Page
类中已经有一个属性被调用(您应该得到编译时警告)。

为什么ASP.NET MVC应用程序中有代码隐藏文件?我们还没有将整个站点迁移到MVC。这完全是在WebForms中完成的,我们还剩下一些WebForms页面。但是如果您有一些遗留代码,为什么要修改它?为什么要尝试向其中注入依赖项?为什么不按原样重用它并逐步迁移呢?数据上下文并不是最大的问题,但是需要将UserRepository注入WebForms中,这样我就可以在整个过程中访问同一个用户。为什么所有的问题?事实上,我需要将依赖项注入到MVC应用程序中的WebForms页面中。为什么真的重要吗?即使你认为没有理由,也不意味着没有理由。我问所有这些问题是为了更好地理解你的情况。为了能够提供一个好的答案,了解尽可能多的细节是很重要的。如果你没有心情回答我的问题或者认为这些问题毫无意义,那就绝对可以忽略它们。这是完美的。关于上下文部分的命名,我将其更改为隐藏客户名称,忘记了上下文被隐藏。我的名字是[客户名称]上下文。我将在问题中改变这一点:)仅针对遇到此问题的任何其他人,如果您已经拥有App_Start.NinjectMVC3,则不需要NuGet包为Ninject.Web创建的文件。