gpt4 book ai didi

c# - Ninject 工厂 + InCallScope + ContextPreservation

转载 作者:行者123 更新时间:2023-11-30 18:21:30 25 4
gpt4 key购买 nike

首先,我知道相关帖子here , 但那个帖子很老了,更重要的是,没有直接回答。

所以现在我使用最新的 Ninject(稳定的 3.2 Nuget 包)和上面提到的扩展,但仍然看到非预期的行为。

public interface IFoo {}
public class Foo {}

public class Parent {
public IFoo foo;
public IFoo foo2;
public Func<IFoo> fooFactory;
public Parent(IFoo foo, Func<IFoo> factory) {
this.foo = foo;
this.fooFactory = factory;
}
public void init() { this.foo2 = this.fooFactory(); }
}

...

kernel.Bind<IFoo>().To<Foo>().InCallScope();
var instance = kernel.Get<Parent>();
instance.init();
instance.foo.ShouldEqual(instance.foo2);

这个测试失败了,所以似乎没有为工厂函数保留上下文,它创建了一个新的 Foo

如何实现预期的行为?

更新

根据评论,我尝试了相同的代码,其中已声明的 IFooFactory 接口(interface)与 ToFactory() 绑定(bind)。行为是相同的。

更新 2

我刚刚尝试了最新的不稳定工厂和上下文保存扩展,结果还是一样。

最佳答案

有 2 个调用。一个是 kernel.Get<Parent>() , 另一个是 instance.init() .

关于c# - Ninject 工厂 + InCallScope + ContextPreservation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com