2012-03-13 9 views

Respuesta

14

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 
+0

Gracias por tu explicación y ejemplos. – Srv19