我有一个模块,当我的应用程序以下面的代码启动时,我通过内核加载它:
IKernel kernel = new StandardKernel();
kernel.Load("*.dll");
但在某些情况下,我不想将模块组件放在bin文件夹中,也不要使用该模块及其相应的功能。然后我的消费者类中的属性使用[Inject]
属性。我希望Ninject在找不到它的模块时为这些属性返回null。
答案 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; }
}