2016-06-28 4 views
1
public class Job1:IJob 
    { 
     public Job(MyService service) 
     { 
     } 
    } 

    public class Job2:IJob 
    { 
     public Job(MyService service,int hours) 
     { 
     } 
    } 


    public static IUnityContainer ConfigureUnityContainer() 
    { 
     UnityContainer container = new UnityContainer(); 
     container.RegisterType<MyService, MyService>(); 
     container.RegisterType<IJob, Job1>("Job1"); 
     container.RegisterType<IJob, Job2>("Job2", new InjectionConstructor(Convert.ToInt32(ConfigurationManager.AppSettings["Hours"]))); 
     return container; 
    } 

Ich habe zwei clases Job1 und Job2 von IJob Schnittstelle abgeleitet. Siehe die obige Implementierung des KonstruktorsUnity: Wie Konfiguration injizieren und bereits registrierte Instanz

Der Job2 Konstruktor benötigt 2 Parameter. Der Wert des zweiten Parameters kommt aus der Konfigurationsdatei. Ich übergebe diesen Wert während der Registrierung Job2. Aber für den ersten Parameter MyService, ich hoffte, Einheit wird automatisch MyService Instanz an den Konstruktor seit seiner bereits registrieren. Aber wenn ich Fehler bekommen ausführen

MyNameSpace.Job2 keinen Konstruktor hat, der die Parameter nimmt (Int32).

anzumerken, dass die Einheit der Lage ist, passieren Instanz von MyService-Job1

+0

Ich denke, dass dies ein Fundament Problem. Sie sollten die Dokumentation überprüfen -> https://msdn.microsoft.com/en-us/library/ff648449.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 – Cabrra

Antwort

1

ersten Parameter hinzufügen - Art der Dienstleistung:

container.RegisterType<IJob, Job2>("Job2", new InjectionConstructor(typeof(MyService), Convert.ToInt32(ConfigurationManager.AppSettings["Hours"]))); 
+0

Ich wusste nie, dass Sie könnten übergeben Sie einen Typ und es würde es in einem InjectionConstructor auflösen. Cool! –

+0

InjectionConstructor teilt Unity mit, welcher für die Objekterstellung verwendet werden soll. In Ihrem Beispiel versucht es, Konstruktor mit einem Parameter zu verwenden – Backs

+0

@ScottChamberlain können Sie diese Antwort akzeptieren? – Backs

Verwandte Themen