我一直在引用同一个对象。正如您在构造函数中看到的那样,有两个具有相同类型的对象。我希望得到两个不同的实例,但每当我设置_player1的属性时,_player2都会相应地设置相同的值。我究竟做错了什么? 感谢
IoC容器
public static void ConfigureContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterInstance<IPlayer>(new Player());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
控制器构造函数
public FlagGameController(IPlayer player1, IPlayer player2)
{
_player1 = player1;
_player2 = player2;
_currentPlayer = player1;
}
答案 0 :(得分:2)
当你说
时 builder.RegisterInstance
实际上,您将其设置为始终返回相同的实例。如果要每次都返回不同的实例,请使用
builder.RegisterType<Player>().As<IPlayer>().InstancePerDependency();
参考 - http://docs.autofac.org/en/latest/lifetime/instance-scope.html#instance-per-dependency
答案 1 :(得分:0)
RegisterInstance
方法告诉 Autofac 只在容器内注册IPlayer
的单个实例,它允许您注册一个单例。
以下代码
builder.RegisterInstance<IPlayer>(new Player());
相当于
builder.RegisterInstance<IPlayer>(new Player()).SingleInstance();
或 。builder.RegisterType()为()SingleInstance();
有关详细信息,请参阅Registration Concepts - Instance components。
如果您想拥有多个实例,请不要使用RegisterInstance
方法,而是使用其他注册方法。例如
builder.Register(c => new Player()).As<IPlayer>();
或
builder.RegisterType<Player>().As<IPlayer>();
默认情况下,Autofac 使用 InstancePerDependency 方法,该方法将注册配置为每次解析时创建新实例。