Service Locatorパターンを使用せずにNinject.Kernelにアクセスする方法の明確なガイドラインを見つけることなく、このトピックに関する数十の投稿を読みました。
私は現在、使用する必要のあるクラスCustomerBusiness
(これは私のサービスです)に次のものがあり、正常に動作しますが、それが推奨される方法ではないことをよく知っています。
private CustomerBusiness _customerBusiness;
private ICustomerRepository CustomerRepository
{
get { return NinjectWebCommon.Kernel.Get<IAccountRepository>(); }
}
private CustomerBusiness CustomerBusiness
{
get
{
if (_customerBusiness == null)
{
_customerBusiness = new CustomerBusiness(AccountRepository);
}
return _customerBusiness;
}
}
public Customer GetCustomer(int id)
{
return CustomerBusiness.GetCustomer(id);
}
これは、上記のコードでアクセスされるKernelプロパティです。
public static IKernel Kernel
{
get
{
return CreateKernel();
}
}
このためのファクトリの使用に関する多くの提案を読みましたが、このファクトリの使用方法を説明しているものはありません。誰かが「CustomerFactory」またはそれを使用する方法を含む他の推奨されるアプローチを私に見せてくれたら本当にありがたいです。
アップデート
ASP.NET Webフォームを使用しておりCustomerBusiness
、CodeBehindからアクセスする必要があります。
解決
私が機能していることがわかった最終的な解決策は、この投稿で最も多くの票を獲得した答えでした 。asp.netWebフォームにNinjectまたはDIを実装するにはどうすればよいですか。
これは次のようになります(Ninject.Webの一部であるPageBaseからの継承に注意してください-それが鍵です!):
public partial class Edit : PageBase
{
[Inject]
public ICustomerBusiness CustomerBusiness { get; set; }
...
以下の受け入れられた答えは、間接的にこの解決策を見つけるように私を導きます。