Con ambas construcciones logras lo mismo. Sin embargo, en este último enfoque la construcción del objeto único Foo
se aplaza hasta la primera llamada Get
. Déjenme ilustrarlo con un pequeño ejemplo. Considere la siguiente aplicación:
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");
}
}
Esto le pone la salida:
Starting the app
Foo constructor called
Binding complete
Stopping the app
Ahora, vamos a reemplazar la llamada ToConstant
con 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");
}
}
Ahora la salida es:
Starting the app
Binding complete
Foo constructor called
Stopping the app
Gracias por tu explicación y ejemplos. – Srv19