从 Unity Container 中解析实现多个接口的实例

Resolve instance which implement multiple interfaces from Unity Container

请在下面查看我当前的代码

public interface ICoach
    {
        void Test();
    }

    public class Player : IPlayer
    {
        void IPlayer.Run()
        {
            Console.WriteLine(this.Name + "Run");
        }

        void IPlayer.Jump()
        {
            Console.WriteLine(this.Name + ": Jump");
        }

        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }


        public Player(string name)
        {
            Name = name;
        }
    }

    public class Coach : ICoach
    {
        void ICoach.Test()
        {
            Console.WriteLine("Test");
        }
    }

    public class SuperPlayer : ICoach, IPlayer
    {
        private int count = 0;

        public void Test()
        {
            Console.WriteLine("Super player test");
            count++;
        }

        public void Run()
        {
            Console.WriteLine("Super player run");
            count++;
        }

        public void Jump()
        {
            Console.WriteLine("Super player jump");
            count++;
        }

        public void PrintRunTimes()
        {
            Console.WriteLine(string.Format("Super player runs {0} times", count));
        }
    }

container.RegisterType<IPlayer, Player>();
container.RegisterType<ICoach, Coach>();
container.RegisterType<ICoach, SuperPlayer>("super", new ContainerControlledLifetimeManager());
container.RegisterType<IPlayer, SuperPlayer>("super", new ContainerControlledLifetimeManager());

SuperPlayerclass实现了两个接口:IPlayer和ICoach; Player class 实现 IPlayer 接口,Coach class 实现 ICoach 接口。

我可以使用 super 参数解析 SuperPlayer 实例。但它是单例的。如果我不这样注册,使用 super 参数从 IPlayer 和 ICoach 解析将 return 2 个不同的实例。有没有办法解析 SuperPlayer 实例,而不是单例实例?

您可以创建一个结合了 ICoachIPlayer 的新 ISuperPlayer 界面。然后根据需要实现、注册和解析该接口。