那么假设我有这段代码:
var builder = new ContainerBuilder();
builder.RegisterInstance(new MyType());
var container = builder.Build();
后来,我想要更改所有在container
上调用的将来解析的MyType
实例。
那么假设我有这段代码:
var builder = new ContainerBuilder();
builder.RegisterInstance(new MyType());
var container = builder.Build();
后来,我想要更改所有在container
上调用的将来解析的MyType
实例。
当您想要更改注册信息时,请创建一个新的ContainerBuilder
,注册新实例,并调用Update
,并传入容器:
// at some later point...
builder = new ContainerBuilder();
builder.RegisterInstance(myType2);
builder.Update(container);
另一种方法是注册一个委托,该委托能够更改容器提供的基础实例。考虑以下代码:
var theInstance = new MyType();
var builder = new ContainerBuilder();
builder.Register(context => theInstance);
builder.Register<Action<MyType>>(context => newInstance => theInstance = newInstance);
var container = builder.Build();
现在你可以解析该操作以获取可更改注册的委托:
var updateInstance = c.Resolve<Action<MyType>>();
updateInstance(new MyType());
注意: 如果您能详细说明更改实例的时间和原因,或许我们甚至可以找到更好的解决方案。
builder.Register<TInterface>(c => c.Resolve<TConcrete>())
.OnActivating(e => e.ReplaceInstance(new TInterfaceSubclass()));
https://autofaccn.readthedocs.io/en/latest/lifetime/events.html#onactivating