現在Ninjectで直面している課題は、Ninjectを使用するRebind<>()
と、条件付きのバインディングも含めて、すべてのバインディングが削除されることです。以下にばかげた例を挙げましょう。基本的に、私の場合、望ましくない動作を見つけたのは、Rebindが呼び出されると、無条件WhenInjectedInto<T>
を単に上書きするのではなく、条件付きバインディングが削除されるということBind<T>
です。以下のサンプルContract.Assert(cat is Wild);
では、ctorのコントラクトは再バインド後に失敗します。
私がやりたいことをする方法はありますか?すでに注入された条件付きバインディングを保持し、非条件付きバインディングのみを上書きする機能です?
PS:実際には、(リクエストまたは非同期コマンドで)注入された場所に応じて、DataContextスコープを使用していくつかの興味深いことを実行しようとしています。
void Main()
{
StandardKernel kernel = new StandardKernel();
kernel.Bind<ICat>().To<Wild>();
kernel.Bind<ICat>().To<Wild>()
.WhenInjectedInto<EvilCat>();
kernel.Rebind<ICat>().To<Domestic>();
Contract.Assert(kernel.Get<ICat>() is Domestic);
kernel.Get<EvilCat>();
}
interface ICat {}
class Domestic : ICat {}
class Wild : ICat { }
class EvilCat
{
public EvilCat(ICat cat) {
Contract.Assert(cat is Wild);
}
}