我想在一个结合了ASP.Net webforms和ASP.Net MVC的项目中使用Ninject。我正在使用Ninject 2,但是当我使用来自Ninject.Web.Mvc的NinjectHttpApplication时,当我使用类似于PageBase的东西而没有创建内核时,它会抱怨。
我在Global.asax中有以下内容,我不确定要添加什么。
public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
protected override Ninject.IKernel CreateKernel()
{
return new StandardKernel(new ServiceModule());
}
}
有人在某个地方工作,可以分享一些想法或代码吗?
答案 0 :(得分:2)
正如鲁宾所说,我在Ninject邮件列表上张贴了一条消息:
http://groups.google.com/group/ninject/browse_thread/thread/317fc48387399aa6
简而言之,答:不幸的是,这是不可能的。但是,使用自定义PageBase类,您可以使Property和Method注入成为可能(来自Nate Kohari在Ninject邮件列表中的答案):
public abstract class PageBase : Page
{
public IKernel Kernel { get; private set; }
public PageBase() { Kernel = ...; }
public void Page_Init() { Kernel.Inject(this); }
}
答案 1 :(得分:1)
1)查看Mvc和非Mvc Ninject Extensions的源代码 - 代码非常简短而且整洁
2)转到ninject邮件列表并询问此问题,以及您从源中学到的内容。有一个答案或补丁快速闪电
答案 2 :(得分:1)
这里有一些非常好的资源,介绍如何在网格表格中利用DI,这些资源是我之前收藏过的:
http://aspnetresources.com/articles/ioc_and_di_with_web_forms http://aspnetresources.com/articles/real_world_ioc_and_di_with_webforms
希望这有帮助。