![](/img/trans.png)
[英]How can I specify a constructor for Unity to use when resolving a service?
[英]Can I choose which constructor Unity will use?
是否可以在 Unity Resolve 中指定 Unity 应该使用哪个构造函数?
我尝试创建的 object 可能看起来像这样:
public class MyObject
{
[UseWhenSunny]
public MyObject(InputOne one)
{
Console.WriteLine("Chose constructor one");
}
[UseWhenRaining]
public MyObject(InputTwo two)
{
Console.WriteLine("Chose constructor two");
}
}
public class InputOne
{
}
public class InputTwo
{
}
我的构造可能是这样的:
var container = new UnityContainer();
container.RegisterInstance(new InputTwo());
var myObject = container.Resolve<MyObject>();
我可以很容易地找到正确的 ConstructorInfo,但我还没有弄清楚如何强制 Unity 使用这个特定的构造函数?
当您对游戏/程序中的状态使用不同的构造函数时,这是一个奇怪的构造。 如果你想传递两种不同的 class 类型,你可以使用 inheritance。 您需要一个共同的祖先,因为InputOne
和InputTwo
仅共享Object
作为共同的祖先。 因此,您需要指定一个新的基数 class。在这个基数 class 中,您编写了通用功能/定义。
这是一个例子:
public abstract class InputBase
{
public abstract void Show();
}
public class InputOne : InputBase
{
public override void Show()
{
Console.WriteLine("Show one");
}
}
public class InputTwo : InputBase
{
public override void Show()
{
Console.WriteLine("Show two");
}
}
public class MyObject
{
public MyObject(InputBase input)
{
// because InputOne and InputTwo can be casted to their base class
// they both can be passed as InputBase.
// InputBase defines the Show method which their derived ones must
// implement (abstract).
input.Show();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.