我正在使用ASP.NET Webforms并在一个页面中我想在后面的代码中对Web方法进行AJAX调用。问题是Web方法是静态的,我无法访问页面变量。我需要能够让Ninject注入一个依赖项。有没有办法在网络方法中做到这一点?如何在Web方法中访问我的变量?
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.
}
}
由于Web方法是静态的,几乎好像傻了,甚至把它后面的代码的页面,因为它不能真正与网页互动。这是代码背后的孤岛。有没有更好的方法来完成这一点?或者至少有一种方法可以让Ninject以某种方式将ISecurityController注入到Web方法中?
感谢您的帮助。
我担心这是唯一的方法。至少可以说是怪诞的。我只希望在整个应用程序中发生一次这种逻辑,只要我能帮助它;这样做不止一次会破坏SoC的目的。但是,如果这是我们唯一的选择,那么就这样吧。感谢您的回答:) – Chev 2012-01-12 17:31:24
是的。您尝试使用IoC来分离内容,然后必须返回某种服务定位器和类似的反模式。这是我使用静态方法时遇到的问题之一。感谢微软的那一个;)很高兴我能帮忙! – 2012-01-12 17:33:51
是的。我能想到的唯一选择是使用Web服务而不是web方法后面的代码,因为我可以在Web服务上执行属性注入,但是此Web方法中的逻辑被隔离到单个页面,并且仅被使用一次。似乎很愚蠢的是有一个方法的整个Web服务,但这可能比注入反模式更好。如果只有我们使用MVC。 – Chev 2012-01-12 17:35:27