我尝试了在如何在 ASP.NET Web Forms 上实现 Ninject 或 DI?(Jason 的回答)中找到的以下解决方案:
在一个网页中,我将它注入进去:
- 创建一个新的 ASP.NET WebForms 项目
- 使用 NuGet 添加 Ninject.Web lib(它也将带来 Ninject.Web.Common 和 Ninject libs)
- 在 App_Start / NinjectWebCommon.cs / RegisterServices 方法中注册您的自定义绑定
- 在您的页面上使用属性注入
在 ASP.NET Web 应用程序中非常有效。
问题是我想在 ASP.NET 网站而不是 Web 应用程序中使用 Ninject 进行 DI。
我在 NinjectWebCommon / RegisterServices 中注册了自定义绑定:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ITestRepository>().To<TestRepository>();
}
在一个网页中,我将它注入进去:
public partial class _Default : System.Web.UI.Page
{
[Inject]
public ITestRepository _repository { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine(_repository.ExecuteOperation());
}
}
它总是抛出一个空引用异常,而且 NinjectWebCommon.cs 内部的断点永远不会被触发 - 不像在 web 应用程序中。
还需要做什么才能使 Ninject 3 在网站中工作?
kernel.Bind<...>...
之前编写Debugger.Break()
,它将会触发该行代码。 - nebffa