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

構成や、既に登録済みのインスタンスを注入する方法。上記のコンストラクタの実装を参照してください。ユニティ:私は<code>IJob</code>インターフェースに由来する2つのclases <code>Job1</code>と<code>Job2</code>を持って

Job2コンストラクタは2つのパラメータをとります。 2番目のパラメータの値はconfigファイルから来ています。 Job2を登録している間、その値を渡しています。 しかし、最初のパラメータMyServiceの場合、Unityは自動的にMyServiceインスタンスをコンストラクタに渡します。しかし、実行時にエラーが発生する

MyNameSpace.Job2には、パラメータ (Int32)を使用するコンストラクタがありません。

Unityは最初のパラメータを追加します。Job1

+0

私は、これは基礎の問題だと思います。ドキュメントを確認する必要があります - > https://msdn.microsoft.com/en-us/library/ff648449.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 – Cabrra

答えて

1

MyServiceのインスタンスを渡すことができている、ということ注 - サービスの種類:

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

型を渡すとInjectionConstructorで解決されます。クール! –

+0

InjectionConstructorは、オブジェクトの作成に使用するUnityを通知します。あなたの例では、1つのパラメータでコンストラクタを使用しようとしています – Backs

+0

@ScottChamberlainこの答えを受け入れることはできますか? – Backs

関連する問題