как внедрить свойство только тогда, когда ядро ​​его находит - PullRequest
2 голосов
/ 30 октября 2011

У меня есть модуль, который я загружаю по ядру, когда мое приложение запускается со следующим кодом:

IKernel kernel = new StandardKernel();
kernel.Load("*.dll");

Но в некоторых случаях я не хочу помещать сборку модуля в папку bin, а donНе используйте этот модуль и соответствующие ему функции.Тогда у меня есть свойства в моем потребительском классе, которые используют атрибут [Inject].Я хочу, чтобы Ninject возвращал null для этих свойств, когда он не находит свой модуль.

1 Ответ

2 голосов
/ 30 октября 2011

По умолчанию этот код генерирует исключение, если NInject не может найти зависимость.

using (IKernel kernel = new StandardKernel())
{
    kernel.Load("*.dll");
    var someClass = kernel.Get<SomeClassWithDependency>();
    someClass.TryDoSomething();
}

Чтобы решить эту проблему, просто добавьте атрибут Optional к свойству:

public class SomeClassWithDependency
{
    public void TryDoSomething()
    {
        if (SomeType != null)
        {
            SomeType.DoSomething();
        }
    }

    [Inject, Optional]
    public ISomeType SomeType { get; set; }
}
...