私はASP.NET Webformsを使用しています。あるページで、コード内のWebメソッドにAJAX呼び出しを行いたいとします。問題は、Webメソッドが静的で、ページ変数にアクセスできないということです。私はNinjectに依存性を注入させる必要があります。 Webメソッドでこれを行う方法はありますか?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.
}
}
ウェブメソッドが静的であるため、ほとんどそれが実際のページと対話することはできませんので、偶数ページのための背後にあるコードでそれを持っている愚かなようです。それはコードの中の孤立した島です。これを達成するより良い方法はありますか?または、少なくとも私はNinjectが何らかの方法でWebメソッドにISecurityControllerを挿入する方法がありますか?
ありがとうございました。
私はこれが唯一の方法であることを恐れていました。最小限に抑えるのはグロテスクです。私はそれを助けることができる場合にのみ、このロジックをアプリケーション全体で一度発生させることが好きです。 SoCの目的をはるかに超えるものにすることができます。しかし、これが唯一の選択肢ならば、そうすることができます。答えをありがとう:) – Chev
はい。あなたはIoCを使って物事を解体しようとしています。そして、ある種のサービスロケータと同様のアンチパターンに戻らなければなりません。これは私が静的メソッドで持つ問題の1つです。その1つのためにマイクロソフトに感謝;)私は助けることができてうれしい! –
うん。私が考えることのできる唯一の代替案は、Webサービスのプロパティインジェクションを行うことができるので、Webメソッドの背後にあるコードの代わりにWebサービスを使用することです。このWebメソッドのロジックは単一のページに分離され、 1つのメソッドに対してWebサービス全体を持つのは馬鹿だと思われますが、それはおそらく注入アンチパターンよりも優れています。私たちがMVCを使用していただけの場合。 – Chev