4

依存関係を解決するために、TinyIoC で Nancy を使用しています。

特に 1 つの依存関係は、アプリケーション ライフサイクル シングルトンである必要があります。

デフォルトのコンストラクターでそれを行うと、動作します:

container.Register<IFoo, Foo>().AsSingleton();   // WORKS

しかし、コンストラクターでいくつかの引数を使用してこれを試しても、そうではありません:

container.Register<IFoo>((c, e) => new Foo("value", c.Resolve<ILogger>())).AsSingleton();
// FAILS with error "Cannot convert current registration of Nancy.TinyIoc.TinyIoCContainer+DelegateFactory to singleton"

.AsSingleton()なくても、再び機能しますが、シングルトンを取得できません:

container.Register<IFoo>((c, e) => new Foo("value", c.Resolve<ILogger>()));
// Works, but Foo is not singleton

何か案は?間違いは明らかだと思いますが、見つけられません。私はすべてのgoogle-fooを使い果たしました。


編集

コードは次の場所で実行されます。

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        base.ConfigureApplicationContainer(container);

        // here 
    }
}
4

1 に答える 1

7

ここで行っていることは、TinyIOC に「これらのいずれかが必要になるたびに、私のデリゲートを呼び出してください」と伝えているため、そのメソッドを使用する場合は、シングルトンの側面を自分で処理する必要があります。

遅延作成が特に必要でない限り、次のようにする方が簡単です。

container.Register<IFoo>(new Foo("value", c.Resolve<ILogger>()));

これにより、IFoo が必要なときは常にそのインスタンスが使用されます。

于 2016-01-07T17:35:09.337 に答える