繁体   English   中英

我可以选择 Unity 使用哪个构造函数吗?

[英]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。 您需要一个共同的祖先,因为InputOneInputTwo仅共享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();
    }
}

请参阅Inheritance(C# 编程指南)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM