Настроить Ninject для разрешения null при использовании ToMethod

Как я могу настроить Ninject для решения null с моей инсталляцией конструктора? Я использую ToMethod с помощью метода factory и InTransientScope. Мой factory предназначен для возврата null, если некоторые вещи не выполняются. Тем не менее, Ninject генерирует исключение, которое заставляет меня использовать конструктор без параметров. Этого я бы хотел избежать.

Я связываю этот путь:

Bind<IClient>
    .ToMethod(x => someFactoryMethod())
    .InTransientScope();

someFactoryMethod() может возвращать IClient или null.

Я хотел бы, чтобы введенный класс передал null вместо исключения. Когда я использую TryGet, я получаю null в моем введенном классе, когда пытаюсь его разрешить.

Я использую последний Ninject для .Net 4.0.

Ответы

Ответ 1

Предотвратите использование null в качестве специального случая. Вместо этого попробуйте использовать Null Object pattern. Это не дает вам возможности оформить код базы с нулевыми проверками:

Bind<IClient>
    .ToMethod(x => someFactoryMethod() ?? NullClient.Instance)
    .InTransientScope();

// Null Object implementation of IClient
public class NullClient : IClient
{
    public static readonly IClient Instance = new NullClient();

    // Implement the members of IClient to do nothing.
    public void ClientOperation()
    {
        // noop.
    }
}

Ответ 2

Вы должны настроить это значение null. На данный момент у меня нет исходного кода, но это должно выглядеть примерно так:

new StandardKernel(new NinjectSettings { AllowNullInjection = true });

Ответ 3

Вы можете пометить свой конструктор атрибутом Optional.