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

时间:2012-04-17 04:16:25

标签: 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 DataContext { get; set; }

Context属性每次都为null。它工作得很好,直到我更新到Ninject 3.0。

我的开始方法如下:

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

有关如何使Ninject将DataContext注入WebForm以及Razor实例化的类的任何想法?

1 个答案:

答案 0 :(得分:1)

为此,您需要安装Ninject.Web NuGet(撰写本文时的最新版本为3.0.0.5),然后让您的webform派生自Ninject.Web.PageBase而不是{{1 }}:

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类中已经有一个名为Context的属性(您应该收到编译时警告)。