Tôi đã thử các giải pháp sau đây được tìm thấy trong How can I implement Ninject or DI on asp.net Web Forms? (Jason của câu trả lời)Dependency Injection với Ninject 3 trong ASP.NET trang web
- Tạo một WebForms ASP.NET mới dự án
- Sử dụng NuGet để thêm Ninject. lib Web (mà cũng sẽ mang xuống libs Ninject.Web.Common và Ninject)
- đăng ký cam kết ràng buộc tùy chỉnh của bạn trong App_Start/NinjectWebCommon.cs/RegisterServices phương pháp
- Sử dụng thuộc tính tiêm trên trang của bạn
Hoạt động tốt trong các ứng dụng web ASP.NET.
Vấn đề là tôi muốn sử dụng Ninject cho DI trong một trang web ASP.NET , không phải là một ứng dụng web.
Tôi đã đăng ký cam kết ràng buộc tùy chỉnh trong NinjectWebCommon/RegisterServices:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ITestRepository>().To<TestRepository>();
}
Trong một trang web tôi tiêm nó:
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());
}
}
Nó luôn luôn ném một ngoại lệ tham chiếu null và breakpoint bên NinjectWebCommon.cs là không bao giờ đạt được - không giống như trong một ứng dụng web.
Điều gì khác nên được thực hiện để làm cho Ninject 3 hoạt động trong một trang web?
Lưu ý rằng điểm ngắt được nhấn vì trình gỡ rối gắn quá muộn. Nếu bạn viết 'Debugger.Break()' trước 'kernel.Bind <...> ...' nó sẽ nhấn vào dòng đó. – nebffa