Self-learning with a simple injector

I am trying to learn dependency injection using Simple Injector, so I created a simple program. I looked through many examples, but did not find anything like it. Ninject has a similar example, and they independently bind the implementation to themselves using

Bind<Samurai>().ToSelf();

But I did not find examples of self-binding into a simple injector. Since it costs, the program works fine, and I get the expected results I'm looking for, but is this the right way to do this? A program is the latest code example.

Interface

public interface ICar
{
    void Move(string direction, int distance);
    void Stop();
}

Class

public class Driver
{
    private readonly ICar _car = null;

    public Driver(ICar car)
    {
        this._car = car;
    }

    public void Drive(string direction, int distance)
    {
        _car.Move(direction, distance);
    }

    public void Brake()
    {
        _car.Stop();
    }
}

Implementations

public class Ferrari : ICar
{
    public void Move(string direction, int distance)
    {
        Console.WriteLine("I am driving {0} really fast for {1} miles", direction, distance);
    }
    public void Stop()
    {
        Console.WriteLine("I am slamming on the brakes because I'm going too fast");
    }
}

public class Lexus : ICar
{
    public void Move(string direction, int distance)
    {
        Console.WriteLine("I am driving {0} for {1} miles", direction, distance);
    }
    public void Stop()
    {
        Console.WriteLine("I am applying the brakes");
    }
}

Program

class Program
{
    static void Main(string[] args)
    {
        var container = new Container();
        container.Options.AllowOverridingRegistrations = true;

        container.Register<ICar, Lexus>();
        container.Register<ICar, Ferrari>();

        container.Verify();

        var johnDoeLexus = new Driver(container.GetInstance<Lexus>());

        johnDoeLexus.Drive("North", 10);
        johnDoeLexus.Brake();

        var johnDoeFerrari = new Driver(container.GetInstance<Ferrari>());

        johnDoeFerrari.Drive("North", 10);
        johnDoeFerrari.Brake();

        Console.ReadLine();
    }
}
+4
source share
3 answers

Simple Injector :

container.Register<Samurai>();

:

container.Register<Samurai, Samurai>();

- :

container.Register<Samurai, Samurai>(Lifestyle.Transient);

Register<TService, TImplementation>. , , TImplementation , TService.

Simple Injector, , (, Samurai) , (, , , , GetInstance<Something>()). , Simple Injector , , Simple Injector , ( Verify()), Simple Injector .

, GetInstance<TService> TService. :

container.Register<ICar, Lexus>();
var johnDoeLexus = new Driver(container.GetInstance<Lexus>());

, ICar, ICar, Lexus. Lexus TService, Simple Injector , Lexus. , :

container.Register<ICar, Lexus>();
container.Register<Lexus, Lexus>();
var johnDoeLexus = new Driver(container.GetInstance<Lexus>());

, , , ICar :

container.Register<ICar, Lexus>(Lifestyle.Singleton);

var instance1 = container.GetInstance<Lexus>();
var instance2 = container.GetInstance<Lexus>();

, GetInstance () , , Simple Injector () Lexus Lexus GetInstance.

AllowOverridingRegistrations. AllowOverridingRegistrations . , Register , Simple Injector . Simple Injector RegisterCollection. , :

container.RegisterCollection<ICar>(new[] { typeof(Lexus), typeof(Ferrari) });

:

var cars = container.GetAllInstances<ICar>();

:

public SomeType(IEnumerable<ICar> cars) {
    this.cars = cars;
}

, RegisterCollection, GetInstance<ICar> , Simple Injector , .

API , , , . AllowOverridingRegistrations . , . . , . .

+11

- Simple Injector. , ,

Bind<Samurai>().ToSelf();

.

+1

, . Ninject .ToSelf()

Ninject .ToSelf()

kernel.Bind<Samurai>().To<Samurai>();

.ToSelf() :

kernel.Bind<Samurai>().ToSelf();

, .ToSelf(), , , . Ninjects , .ToSelf(), - :

kernel.Bind<Samurai>().ToSelf().InSingletonScope();

kernel.Bind<Samurai>().ToSelf().InThreadScope()

api , , .ToSelf() :

container.Register<Samurai>(Lifestyle.Singleton);

:

Lexus, ICar:

ICar car = container.GetInstance<ICar>()

, Lexus Ferrari , ICar .

+1

All Articles