Tôi có một ứng dụng ASP.NET MVC với một NinjectModule đơn giản:Lỗi kích hoạt HttpContext - Hơn một khớp ràng buộc có sẵn
public class MainModule : NinjectModule
{
public override void Load()
{
Bind<AppSettings>().ToSelf().InSingletonScope();
Bind<HttpContext>().ToMethod(context => HttpContext.Current); // <-- problem
Bind<MainDbContext>().ToSelf().InRequestScope();
Bind<UserInfo>().ToSelf().InRequestScope();
}
}
Đây là mã ràng buộc duy nhất trong toàn bộ ứng dụng của tôi. Khi tôi chạy ứng dụng của tôi, tôi ngay lập tức nhận được lỗi runtime này:
Error activating HttpContext
More than one matching bindings are available.
Activation path:
3) Injection of dependency HttpContext into parameter httpContext of constructor of type UserInfo
2) Injection of dependency UserInfo into parameter userInfo of constructor of type HomeController
1) Request for HomeControllerSuggestions:
1) Ensure that you have defined a binding for HttpContext only once.
Thông báo lỗi dường như được nói rằng tôi đã xác định các HttpContext
ràng buộc nhiều hơn một lần, nhưng những điều khoản ràng buộc duy nhất trong toàn bộ ứng dụng đang trong MainModule
và tôi đã chỉ xác định rõ ràng một ràng buộc cho HttpContext
. Nếu tôi nhận xét ra rằng dòng mã, tôi ngừng nhận được lỗi, nhưng HttpContext
mà được tiêm là không chính xác (đó là một sản phẩm nào, mới được khởi tạo HttpContext
thay vì HttpContext.Current
).
Lỗi không mô tả trình tự chính xác tiêm tôi mong chờ để xảy ra ...
HttpContext
nên được tiêm vào constructor của UserInfo
, trông như thế này:
public class UserInfo
{
private readonly HttpContext _httpContext;
public UserInfo(HttpContext httpContext)
{
_httpContext = httpContext;
}
// ... etc ... //
}
Và UserInfo
nên được tiêm vào hàm tạo của HomeController
, trông giống như sau:
public class HomeController : Controller
{
private readonly AppSettings _appSettings;
private readonly UserInfo _userInfo;
public HomeController(AppSettings appSettings, UserInfo userInfo)
{
_appSettings = appSettings;
_userInfo = userInfo;
ViewData[Token.AppSettings] = _appSettings;
ViewData[Token.UserInfo] = _userInfo;
}
// ... actions here ... //
}
Tại sao điều này dẫn đến lỗi? Điều này có vẻ giống như một kịch bản tiêm phụ thuộc rất đơn giản. Theo cách nào tôi định nghĩa ràng buộc cho HttpContext
nhiều lần?
Bạn đã hiển thị cho chúng tôi mô-đun chính. Bạn havent nói với chúng tôi nếu bạn đang sử dụng Ninject.Web.MVC3 và/hoặc nơi hạt nhân của bạn đang nhận được tạo ra. Lỗi này cho thấy bạn đang thực thi tải mô-đun vào một Hạt nhân nhiều hơn một lần, ví dụ: bằng cách kích hoạt nó trong bạn 'Global' /' HttpApplication' xây dựng/bắt đầu (trong đó có hầu như luôn luôn> 1). –