12

Das ist mein dad KlasseWie wird der Einheitscontainer konfiguriert, um den Zeichenfolgenkonstruktorwert bereitzustellen?

public class Dad 
    { 
     public string Name 
     { 
      get;set; 
     } 
     public Dad(string name) 
     { 
      Name = name; 
     } 
    } 

Diese Methode mein Test ist

public void TestDad() 
     { 
      UnityContainer DadContainer= new UnityContainer(); 
      Dad newdad = DadContainer.Resolve<Dad>();  
      newdad.Name = "chris";  
      Assert.AreEqual(newdad.Name,"chris");     
     } 

Dies ist der Fehler Ich bin

"InvalidOperationException - the type String cannot be constructed. 
You must configure the container to supply this value" 

bekommen Wie meine ich konfigurieren DadContainer für diese Behauptung zu bestehen? Danke

+0

Werfen Sie einen Blick auf die Konstruktorinjektion. :) – user1908061

Antwort

25

Sie einen parameterlosen Konstruktor bieten sollte:

public class Dad 
{ 
    public string Name { get; set; } 

    public Dad() 
    { 
    } 

    public Dad(string name) 
    { 
     Name = name; 
    } 
} 

Wenn Sie nicht einen parameterlosen Konstruktor bereitstellen können, müssen Sie den Behälter konfigurieren es zu schaffen, entweder durch direkt mit dem Behälter Registrierung:

UnityContainer DadContainer = new UnityContainer(); 
DadContainer.RegisterType<Dad>(
    new InjectionConstructor("chris")); 

oder durch die app/web.config-Datei:

<configSections> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
</configSections> 

<unity> 
    <containers> 
    <container> 
     <register type="System.String, MyProject"> 
     <constructor> 
      <param name="name" value="chris" /> 
     </constructor> 
     </register > 
    </container> 
    </containers> 
</unity> 
+0

ist es so einfach? LOL ... aber was ist, wenn ich nicht kann und der Konstruktor einen String-Parameter haben muss (aus irgendeinem Grund, an den ich jetzt nicht denken kann) –

+0

Dies beantwortet die Frage nicht. – user1908061

+0

@iAteABug_And_iLiked_it Siehe meine aktualisierte Antwort –

Verwandte Themen