Я прочитал десятки сообщений по этой теме, но не нашел четкого руководства о том, как получить доступ к Ninject.Kernel без использования шаблона Service Locator.
В настоящее время у меня есть следующие классы, которые необходимо использоватьCustomerBusiness
(это моя служба ), и она работает нормально, но я прекрасно понимаю, что это не рекомендуемый способ.
private CustomerBusiness _customerBusiness;
private ICustomerRepository CustomerRepository
{
get { return NinjectWebCommon.Kernel.Get(); }
}
private CustomerBusiness CustomerBusiness
{
get
{
if (_customerBusiness == null)
{
_customerBusiness = new CustomerBusiness(AccountRepository);
}
return _customerBusiness;
}
}
public Customer GetCustomer(int id)
{
return CustomerBusiness.GetCustomer(id);
}
Это свойство ядра, доступное в приведенном выше коде :
public static IKernel Kernel
{
get
{
return CreateKernel();
}
}
. Я читал много предложений по использованию фабрики для этого, но ни одна из них не объясняет, как использовать эту фабрику. Я был бы очень признателен, если бы кто-нибудь мог показать мне "CustomerFactory" или любой другой рекомендуемый подход , включая , как использовать его.
Обновление
Я использую веб-формы ASP.NET, и мне нужен доступ к CustomerBusiness
из CodeBehind.
Решение
Окончательное решение, которое я нашел работающим, было ответом с наибольшим количеством голосов, найденным в этом сообщении: Как реализовать Ninject или DI в веб-формах asp.net?
Похоже, это (Note наследование от PageBase, которая является частью Ninject.Web -и это ключ!):
public partial class Edit : PageBase
{
[Inject]
public ICustomerBusiness CustomerBusiness { get; set; }
...
Принятый ниже ответ косвенно привел меня к поиску этого решения.