从 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 实例,而不是单例实例?
您可以创建一个结合了 ICoach
和 IPlayer
的新 ISuperPlayer
界面。然后根据需要实现、注册和解析该接口。
请在下面查看我当前的代码
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 实例,而不是单例实例?
您可以创建一个结合了 ICoach
和 IPlayer
的新 ISuperPlayer
界面。然后根据需要实现、注册和解析该接口。