これがユニティのバグかどうかはわかりませんが、3番目のケースで以下のプログラムが150を出力する理由を説明してくれる人はいますか?
void Main()
{
// Test 1
Derived d = new Derived();
d.Height.Dump(); //Prints 10
// Test 2
IUnityContainer unityContainer = new UnityContainer();
unityContainer.Resolve(typeof(Derived)).Dump(); // Prints 10
// Test 3
unityContainer.RegisterType<IPrintHeightService<Derived>, PrintHeightService<Derived>>();
var output = unityContainer.Resolve<IPrintHeightService<Derived>>();
output.Show(); //Prints 150
}
public interface IHasHeight
{
Int32 Height {get; set;}
}
// Define other methods and classes here
public class Default : IHasHeight
{
public Int32 Height {get; set;}
public Default()
{
Height = 150;
}
}
public class Derived : Default
{
public new Int32 Height {get { return 10;}}
}
public interface IPrintHeightService<T> where T:IHasHeight, new()
{
void Show();
}
public class PrintHeightService<T> : IPrintHeightService<T> where T:IHasHeight, new()
{
private IHasHeight objectWithHeight;
public PrintHeightService(IUnityContainer unityContainer)
{
objectWithHeight = (T) unityContainer.Resolve(typeof(T));
}
public void Show()
{
Console.WriteLine(objectWithHeight.Height); // Prints 150
}
}
これは、説明したように初期化子が派生からベースに実行されるためだと思われます (http://blogs.msdn.com/b/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the -opposite-order-as-constructors-part-two.aspx) しかし、それが団結で明らかであり、それ以外ではないのはなぜですか?
どうもありがとう。