Как получить доступ к Ninject.Kernel без использования шаблона Service Locator

Я прочитал десятки сообщений по этой теме, но не нашел четкого руководства о том, как получить доступ к 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; }
   ...

Принятый ниже ответ косвенно привел меня к поиску этого решения.

11
задан Community 23 May 2017 в 12:13
поделиться