c# - 我可以选择 Unity 使用哪个构造函数吗?
问题描述
是否可以在 Unity Resolve 中指定 Unity 应该使用哪个构造函数?
我试图创建的对象可能看起来像这样:
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 使用这个特定的构造函数?
解决方案
当您对游戏/程序中的状态使用不同的构造函数时,这是一个奇怪的构造。如果你想传递两种不同的类类型,你可以使用继承。您需要一个共同的祖先,因为InputOne
并且InputTwo
仅Object
作为共同的祖先共享。所以你需要指定一个新的基类。在这个基类中,您编写通用功能/定义。
这是一个例子:
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();
}
}
请参阅继承(C# 编程指南)
推荐阅读
- php - Woocommerce 中的自定义结帐选择字段更改动态运输方式
- debugging - 如何在批处理模式下执行 gdb 断点命令?
- angularjs - 不确定如何创建良好的 redux 行为
- ng-build - Angular 2 Cli 应用程序 404 硬刷新时出错
- r - 按组计算标准偏差,不包括 R 中的当前观察值
- java - 没有循环或递归或乘法的前 N 个数字的总和
- ruby-on-rails - Stripe Connect 身份验证失败 - invalid_client:没有这样的 API 密钥:Bearer
- android - 在项目中找不到任务
- c++ - 如何从 C++ 中的向量中删除重复项(具有原始值)
- r - 如何使用`sapply()`从类别中估算值?