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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top