Могу ли я выбрать, какой конструктор будет использовать Unity? - PullRequest
0 голосов
/ 14 апреля 2020

Можно ли указать в 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 использовать этот специфицированный c конструктор?

1 Ответ

0 голосов
/ 14 апреля 2020

Это странная конструкция, когда вы используете разные конструкторы для состояний в игре / программе. Если вы хотите передать два разных типа классов, вы можете использовать для этого наследование. Вам нужен общий предок, потому что 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# Руководство по программированию)

...