gpt4 book ai didi

c# - 使用 Ninject 绑定(bind)到常量和绑定(bind)到作用域中的类型

转载 作者:可可西里 更新时间:2023-11-01 09:03:17 28 4
gpt4 key购买 nike

哪种创建单个对象到接口(interface)的绑定(bind)的方法更可取,何时以及为什么:

Kernel.Bind<IFoo>().ToConstant(new Foo());

Kernel.Bind<IFoo>().To(typeof(Foo)).InSingletonScope();

或者,如果两种方式都不正确且最好避免,那么应该改用什么?

最佳答案

使用这两种构造,您可以完成相同的任务。然而,在后一种方法中,单个 Foo 对象的构造被推迟到第一次 Get 调用时。让我用一个小例子来说明这一点。考虑以下应用程序:

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting the app");

IKernel kernel = new StandardKernel();
kernel.Bind<IFoo>().ToConstant(new Foo());

Console.WriteLine("Binding complete");

kernel.Get<IFoo>();

Console.WriteLine("Stopping the app");
}
}

public interface IFoo
{
}

public class Foo : IFoo
{
public Foo()
{
Console.WriteLine("Foo constructor called");
}
}

这会得到输出:

Starting the app
Foo constructor called
Binding complete
Stopping the app

现在,让我们将 ToConstant 调用替换为 To(typeof(Foo)).InSingletonScope()

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting the app");

IKernel kernel = new StandardKernel();
kernel.Bind<IFoo>().To(typeof(Foo)).InSingletonScope();

Console.WriteLine("Binding complete");

kernel.Get<IFoo>();

Console.WriteLine("Stopping the app");
}
}

public interface IFoo
{
}

public class Foo : IFoo
{
public Foo()
{
Console.WriteLine("Foo constructor called");
}
}

现在的输出是:

Starting the app
Binding complete
Foo constructor called
Stopping the app

关于c# - 使用 Ninject 绑定(bind)到常量和绑定(bind)到作用域中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682042/

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