読者です 読者をやめる 読者になる 読者になる

Unity コンストラクタ インジェクションのメモ

config ではなくて、コードからコンストラクタインジェクションを指定する際のメモ
Registering Injected Parameter and Property Values では、値を直接指定する例は載ってたのですが パラメータ を Container から取る例が無かったのでメモ

using System;
using Microsoft.Practices.Unity;

class Program {
  static void Main(string[] args) {
    var container = new UnityContainer();
    container.RegisterType<IHoge, Hoge>()
      .RegisterType<Data>(new InjectionConstructor(typeof(IHoge), 10));
    var d = container.Resolve<Data>();
    Console.WriteLine(d.Val); // 10
    Console.WriteLine(d.Driver.Name); // Hoge
    Console.ReadKey();
  }
}

public interface IHoge { string Name { get; } }
public class Hoge : IHoge {
  string IHoge.Name { get { return "Hoge"; } }
}
public class Data {
  private readonly IHoge _driver;
  public IHoge Driver {
    get { return _driver; }
  }
  private readonly int _val;
  public int Val {
    get { return _val; }
  }

  public Data(IHoge hoge, int value) {
    _driver = hoge;
    _val = value;
  }
}

typeof(〜) で その型を渡すといけそうでした。