2016-01-12 1 views
1

Как я могу достичь следующего?Как связать открытый общий с нулевой константой?

Kernel.Bind(typeof(SomeType<>)).ToConstant(null); 

Эта строка кода не получится, потому что компилятор не может вывести null тип из использования. Поскольку я использую открытый общий тип, я не могу передать его в качестве общего аргумента.

Есть ли способ обойти это?

+2

Зачем вам это нужно? Вложение «null» в качестве зависимости не является хорошим подходом. Подумайте об использовании шаблона Null Object. –

ответ

0

Хотя я не вижу причины для этого, тем более, что я искренне сомневаюсь, что у ninject будет какая-либо идея, как его разрешить, вы можете создать нулевой экземпляр и напрямую связать его с этим.

Следующие компилирует, но он не будет делать то, что вы хотите во время выполнения:

var kernel = new StandardKernel(); 

SomeType<int> constant = null; 
kernel.Bind(typeof(SomeType<>)).ToConstant(constant); 

public class SomeType<T>{ } 

Это будет на самом деле бросить ошибку ActivationContext, похожее на следующее:

ActivationException: активирующих Ошибка SomeType {int}, используя привязку от SomeType {T} до постоянного значения. Возвращенный поставщик. null.

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