Autofac 注入具有相同引用的对象
Autofac injects objects with the same reference
我一直在引用同一个对象。正如您在构造函数中看到的那样,有两个具有相同类型的对象。我希望得到两个不同的实例,但每当我设置 _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;
}
当你说
builder.RegisterInstance
您实际上是将其设置为始终 return 同一实例。如果您想每次 return 不同的实例,请使用
builder.RegisterType<Player>().As<IPlayer>().InstancePerDependency();
ref - http://docs.autofac.org/en/latest/lifetime/instance-scope.html#instance-per-dependency
RegisterInstance
方法告诉Autofac在容器内只注册一个IPlayer
实例,它允许你注册一个单例。
下面的代码
builder.RegisterInstance<IPlayer>(new Player());
等同于
builder.RegisterInstance<IPlayer>(new Player()).SingleInstance();
或
builder.RegisterType().As().SingleInstance();
有关详细信息,请参阅 Registration Concepts - Instance components。
如果你想拥有多个实例,请不要使用RegisterInstance
方法,而是使用另一种注册方法。例如
builder.Register(c => new Player()).As<IPlayer>();
或
builder.RegisterType<Player>().As<IPlayer>();
Autofac 默认使用 InstancePerDependency 方法,它将注册配置为在每次解析时创建一个新实例。
我一直在引用同一个对象。正如您在构造函数中看到的那样,有两个具有相同类型的对象。我希望得到两个不同的实例,但每当我设置 _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;
}
当你说
builder.RegisterInstance
您实际上是将其设置为始终 return 同一实例。如果您想每次 return 不同的实例,请使用
builder.RegisterType<Player>().As<IPlayer>().InstancePerDependency();
ref - http://docs.autofac.org/en/latest/lifetime/instance-scope.html#instance-per-dependency
RegisterInstance
方法告诉Autofac在容器内只注册一个IPlayer
实例,它允许你注册一个单例。
下面的代码
builder.RegisterInstance<IPlayer>(new Player());
等同于
builder.RegisterInstance<IPlayer>(new Player()).SingleInstance();
或 builder.RegisterType().As().SingleInstance();
有关详细信息,请参阅 Registration Concepts - Instance components。
如果你想拥有多个实例,请不要使用RegisterInstance
方法,而是使用另一种注册方法。例如
builder.Register(c => new Player()).As<IPlayer>();
或
builder.RegisterType<Player>().As<IPlayer>();
Autofac 默认使用 InstancePerDependency 方法,它将注册配置为在每次解析时创建一个新实例。