Настроить 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
.