ファクトリメソッド(つまりToMethod
)を使用してバインドして注入動作を変更することができます。また、コンテナのAllowNullInjection
設定を構成することでnullを注入することもできます。
もう1つの方法として、ファクトリメソッドを使用して、重量クラスではなく軽量のダミーオブジェクトを指定する方法があります。インターフェイスを使用している場合は、これは簡単ですが、何もしないインターフェイスの実装があるだけです。 FakeItEasyのような模擬フレームワークを使用して、これらのダミーを構築することさえできます。
public void Configure()
{
bool create = true;
IKernel kernel = new StandardKernel();
kernel.Settings.AllowNullInjection = true;
kernel.Bind<IFoo>().ToMethod(ctx => create ? ctx.Kernel.Get<Foo>() : null);
DependendsOnIFoo depFoo = kernel.Get<DependendsOnIFoo>();
}
private interface IFoo {}
private class Foo : IFoo {}
private class DependendsOnIFoo
{
public DependendsOnIFoo(IFoo foo) {}
}
:ここでの利点は、ダミークライアントが
null
をチェックする必要はありません。つまり、クライアントには透過特別行動など
ファクトリメソッドを使用した例、プラスAllowNullInjection
とヌルを作ることです
で軽量なオブジェクトがフラグに応じて置換された例:
public void Configure()
{
bool heavy = true;
IKernel kernel = new StandardKernel();
kernel.Bind<IFoo>()
.ToMethod(ctx => heavy ? ctx.Kernel.Get<HeavyFoo>() : (IFoo)new DummyFoo());
DependendsOnIFoo depFoo = kernel.Get<DependendsOnIFoo>();
}
private interface IFoo {}
private class HeavyFoo : IFoo {}
private class DummyFoo : IFoo { }
private class DependendsOnIFoo
{
public DependendsOnIFoo(IFoo foo) {}
}