1

モジュールを介して、アプリケーションでNinject(v3)バインディングを手動でセットアップしました。

public class FooBarModule : NinjectModule
{
    public override void Load()
    {
        Kernel.Bind<IFooBar>().To<FooBarOne>().InSingletonScope();
        Kernel.Bind<IFooBar>().To<FooBarTwo>().InSingletonScope();
    }
}

今、私のシステムのいくつかのクラスはインターフェースを実装していますIBoostrapable

public class FooBarOne : IFooBar, IBootstrapable 
{ ... }

このインターフェースを実装するクラスのNinjectバインディングを自動的に拡張したいと思います。

だから、最終的に私はできるようにしたいと思います:

var fooBars = Kernel.GetAll<IFooBar>();
var bootstrapbables = Kernel.GetAll<IBootstrapable>();
fooBars.Count().Should().Be(2); // Instance of FooBarOne and FooBarTwo
bootstrapbables.Count().Should().Be(1); // instance of FooBarOne

重要なことは、私が実際に既存のバインディングを拡張することです(したがって、単一のスコープを保持します。

これはどういうわけか拡張ポイントで行うことができますか?

よろしく、

ドミニク

4

1 に答える 1

2

規則を使用できます。例えば

kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses()
    .InheritedFrom<IFooBar>()
    .BindAllInterfaces()
    .Configure(c => c.InSingletonScope());
于 2012-12-11T14:48:51.850 に答える