Iniezione delle dipendenze con Costruttore senza parametri

1

Supponiamo di avere le seguenti interfacce e classi:

public interface ITest { }

public class Test : ITest { }

In NinjectWebCommon.cs:

kernel.Bind<ITest>().To<Test>();

E dopo questo voglio usare la mia interfaccia ITest:

public class Vehicle
{
    private ITest _test = null;
    public Vehicle(ITest test)
    {
        this._test = test;
    }
}

public class TestVehicle
{
    public Vehicle vehicle = new Vehicle();//this will throw an error, because I haven't parameterless cnstructor in Vehicle class;
}

So che nella classe Vehicle posso eseguire il costruttore senza parametri con il seguente metodo:

public Vehicle()
{
    this._test = DependencyResolver.Current.GetService<ITest>();
}

Ma sembra essere una cattiva pratica e non segue il modello di iniezione di dipendenza.

Quindi, come posso risolvere questo?

    
posta Dato Maisuradze 01.02.2017 - 07:48
fonte

1 risposta

2

"Sono le tartarughe fino in fondo".

Proprio come stai iniettando ITest in Vehicle , dovresti inserire Vehicle in TestVehicle - non importa che sia una classe concreta piuttosto che un'interfaccia, lascia che sia il tuo framework DI a fare il lavoro per te.

Infatti, mentre stai usando NInject, un l'auto-vincolante sarà già stato creato per Vehicle per te, quindi c'è ben poco che devi assolutamente fare:

public class TestVehicle
{
  private readonly Vehicle _vehicle;

  public TestVehicle(Vehicle vehicle)
  {
    this._vehicle = vehicle;
  }
}
    
risposta data 01.02.2017 - 09:47
fonte

Leggi altre domande sui tag