根据文档,我可以使用激活事件来“将实例切换为另一个实例或将其包装在代理中”,但我无法让它工作。
这是我尝试过的:
[TestFixture]
public class ReplaceInstanceTest
{
public interface ISample { }
public class Sample : ISample { }
public class ProxiedSample : ISample {
private readonly ISample _sample;
public ProxiedSample(ISample sample) {
_sample = sample;
}
}
[Test]
public void ReplaceInstance_can_proxy_for_interface_type()
{
var builder = new ContainerBuilder();
builder.RegisterType<Sample>()
.As<ISample>()
.OnActivating(x =>
x.ReplaceInstance(new ProxiedSample(x.Instance)))
.SingleInstance();
var container = builder.Build();
var sample = container.Resolve<ISample>();
Assert.That(sample, Is.InstanceOf<ProxiedSample>());
}
}
以上导致类转换异常,因为 autofac 正在尝试转换ProxiedSample
为Sample
实例,但事实并非如此。
是否可以ReplaceInstance
在ActivatingEvent上使用来代理 autofac(2.6 或 3.0)中的对象?
我知道可以使用RegisterDecorator,但我的实际实现既配置代理又条件代理,所以如果可能的话,我更喜欢使用激活事件。