如何在内核找到它时注入属性

时间:2011-10-30 08:03:55

标签: c# .net ninject

我有一个模块,当我的应用程序以下面的代码启动时,我通过内核加载它:

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

但在某些情况下,我不想将模块组件放在bin文件夹中,也不要使用该模块及其相应的功能。然后我的消费者类中的属性使用[Inject]属性。我希望Ninject在找不到它的模块时为这些属性返回null。

1 个答案:

答案 0 :(得分:2)

默认情况下,如果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; }
}