Ninject parametro 2.0 Constructor - come impostare quando costruttore di default è presente anche?
-
18-09-2019 - |
Domanda
Sono nuovo di contenitori del CIO e di apprendimento Ninject. Ho usando la versione 2.0, appena scaricato da Github.
Sto cercando di impostare un parametro stringa su un costruttore quando un costruttore di default è presente anche. Sto passando attraverso la fonte Ninject ma sono sufficientemente familiarità con i modelli utilizzati per individuare facilmente ciò che mi manca.
Ecco la mia console Test App:
static void Main(string[] args)
{
IKernel kernel = new StandardKernel();
kernel.Bind<ITestClass>().To<TestClass>()
.WithConstructorArgument("message", "Hello World!");
var testClass = kernel.Get<ITestClass>();
// Does not work either:
//var testClass = kernel.Get<ITestClass>(new ConstructorArgument("message", "Hello World!"));
testClass.DisplayMessage();
Console.ReadLine();
}
}
public interface ITestClass
{
void DisplayMessage();
}
public class TestClass : ITestClass
{
public TestClass()
{
this.message = "Wrong message :(";
}
private string message;
public TestClass(string message)
{
this.message = message;
}
public void DisplayMessage()
{
Console.WriteLine(this.message);
}
Le stampe di codice "messaggio sbagliato :(" alla console. Se rimuovo il costruttore di default in TestClass ottengo "Ciao Mondo!". Che cosa manco qui?
Per chiarire: io voglio la classe per la stampa "Ciao Mondo!" per la console con il costruttore di default attuale.
Soluzione
stringa non è auto-associabile, quindi non è considerato come una dipendenza. Quando il marcatore .ctor esecuzione, segnerà l'.ctor di default e la stringa .ctor lo stesso in quanto la dipendenza non può essere risolto. È possibile risolvere questo attribuendo tuo .ctor stringa
[Inject]
public TestClass(string message){...}
e il codice funziona bene.