c# - 如何在 Ninject 中使用 Provider

标签 c# ninject

我有以下代码

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/

相关文章:

c# - objective-c 是否具有类似于 c# 的泛型类型(和约束)?

c# - 使用 Ninject 的 MVC 5 流畅验证

.net - 在多个项目中使用 DI/IoC 的模式

c# - 我可以使用 Ninject 将 IKernel 注入(inject)类吗

c# - 跳过 csv 中的第一个拆分字符

c# - 调用第三方DLL中的方法

c# - 在 core 3.0 中将 View 渲染为字符串 : Could not find an IRouter associated with the ActionContext

c# - ClickOnce的流程和先决条件

c# - 使用 Unity IoC 时如何实现 Ninject .InSingletonScope()

c# - 手动解决受属性约束约束的依赖关系