gpt4 book ai didi

c# - 如何在 Ninject 中使用 Provider

转载 作者:太空狗 更新时间:2023-10-29 20:03:27 26 4
gpt4 key购买 nike

我有以下代码

public class Something {
[Inject]
public Configuration config {get;set;} //singleton
[Inject]
public Provider<WindowHandler> windowsProvider { get; set; } //NOT singleton

public void Search(string text) {
WindowHandler handler = windowsProvider.Create(xxxxxx);
//use the new handler that was created
}
}

但似乎提供者在我放置 xxxxxx 的位置采用了 IContext。不应该使用我从内核引导和创建 Something.cs 时的 IContext。 Provider上的无参数Create方法在哪里??? (我来自 Guice land 的观点,它会像上面那样编码)。

所以问题是如何正确执行此操作?

谢谢,院长

最佳答案

您似乎正试图在您的代码中使用提供者作为工厂。

Ninject 术语中的提供者是提供给 Ninject 以创建专门创建的对象的工厂。因此,它获得解析上下文,可用于创建不同的实例,具体取决于注入(inject)实例的位置。

public class FooProvider : Provider<IFoo>
{
public override IFoo CreateInstance(IContext ctx)
{
// add here your special IFoo creation code
return new Foo();
}
}

kernel.Bind<IFoo>().ToProvider<FooProvider>();

你想要的是在你的编码器中创建一个实例的工厂 WindowHandler .因此创建一个接口(interface)来创建这样的实例:

public interface IWindowHandlerFactory
{
WindowHandler Create();
}

Bind<IWindowHandlerFactory>().ToFactory();

或者你可以注入(inject)Func<WindowHandler>无需添加配置。但这在我看来意义不大。

注意:所有这些都需要 Ninject.Extensions.Factory 作为预发行版 3.0.0-rc2 从 Nuget 获得。

另请参阅:http://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/

关于c# - 如何在 Ninject 中使用 Provider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716258/

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