Я использую ASP.NET Webforms, и на одной странице я хочу сделать вызов AJAX веб-методу в коде позади. Проблема в том, что веб-методы являются статическими, и я не могу получить доступ к переменным страницы. Мне нужно, чтобы Ninject вводил зависимость. Есть ли способ сделать это в веб-методе?Как получить доступ к моим переменным в веб-методе?
public partial class Default : Ninject.Web.PageBase
{
[Inject]
public ISecurityController SecurityController { get; set; }
[WebMethod]
public static string DoSomething()
{
SecurityController.WriteToLog(); // Can't access SecurityController because it doesn't exist.
}
}
Поскольку веб-методы являются статическими почти кажется глупо даже иметь его в код для страницы, потому что он фактически не может взаимодействовать со страницей. Это изолированный остров в коде. Есть ли лучший способ сделать это? Или, по крайней мере, есть способ, которым я могу каким-то образом внедрить инъекционный метод ISecurityController в веб-метод?
Спасибо за помощь.
Я боялся, что это будет единственный путь. Это глупо, если не сказать больше. Мне нравится иметь эту логику только один раз во всем приложении, если я могу помочь ему; Выполняя это более чем раз, вид поражения цели SoC. Но, если это единственный выбор, мы должны быть таким. Спасибо за ответ :) – Chev
Да. Вы пытаетесь разделить вещи с помощью IoC, а затем должны вернуться к некоторому локатору сервисов и аналогичным анти-шаблонам. Это одна из проблем со статическими методами. Спасибо Microsoft за это;) Рад, что я мог бы помочь! –
Да. Единственная альтернатива, которую я могу придумать, - это использовать веб-службу вместо кода, лежащего за веб-методом, потому что я могу делать вложение свойств в веб-службу, но логика в этом веб-методе изолирована от одной страницы и используется только один раз. Кажется глупым иметь всю веб-службу для одного метода, но это, вероятно, лучше, чем анти-шаблон инъекции. Если бы мы использовали MVC. – Chev