2016-06-28 92 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; 
    } 

我有兩個clases Job1Job2IJob接口派生。見上面的構造函數實現統一:如何注入配置和已註冊的實例

Job2構造函數需要2個參數。第二個參數的值來自配置文件。我在註冊Job2時通過了該值。 但是,對於第一個參數MyService,我希望Unity會自動將MyService實例傳遞給構造函數,因爲它已經註冊了。但是執行的時候,我得到錯誤

MyNameSpace.Job2沒有一個構造函數的參數 (Int32)已。

需要注意的是,團結能的MyService實例傳遞給Job1

+0

我認爲這是一個基礎問題。你應該檢查文檔 - > https://msdn.microsoft.com/en-us/library/ff648449.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 – Cabrra

回答

1

添加第一個參數 - 服務類型:

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

我從來不知道你可以傳入一個類型,它會在一個InjectionConstructor中解析它。涼! –

+0

InjectionConstructor告訴Unity哪一個用於創建對象。在你的例子中,它嘗試使用帶有一個參數的構造函數 – Backs

+0

@ScottChamberlain你能接受這個答案嗎? – Backs