Сконфигурируйте Ninject для разрешения null при использовании ToMethod - PullRequest
14 голосов
/ 02 марта 2011

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

Я связываю так:

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

someFactoryMethod() может вернуть IClient или null.

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

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

Ответы [ 3 ]

29 голосов
/ 02 марта 2011

Вы должны настроить, чтобы ноль был разрешен.У меня нет исходного кода на данный момент, но он должен выглядеть примерно так:

new StandardKernel(new NinjectSettings { AllowNullInjection = true });
15 голосов
/ 02 марта 2011

Не используйте null в качестве особого случая.Попробуйте вместо этого использовать шаблон Null Object .Это избавляет вас от необходимости дополнять базу кода пустыми проверками:

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 голосов
/ 03 марта 2011

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

...