【发布时间】:2012-03-06 13:43:39
【问题描述】:
我正在尝试使用 Autofac 注册跨 AppDomain 代理。
代理所代表的具体类型实现了接口IServiceHost。因此,代理也应该允许使用该接口调用代理。
我尝试通过以下方式向 Autofac 注册代理:
void Initialize(IServiceHost host)
{
Host = host;
var builder = new ContainerBuilder();
builder.RegisterInstance(host)
.As<IServiceHost>()
.SingleInstance();
Scope = builder.Build();
}
但是,在builder.Build() 通话中,我得到:
参数异常
类型“System.MarshalByRefObject”不可分配给服务“Treadmarks.Core.ServiceBase.IServiceHost”。
但是,host绝对是 IServiceHost,因为它不为 null,并且来自强类型方法参数。
谁能解释我如何正确注册代理?
【问题讨论】:
-
所以
host没有实现IServiceHost?在这种情况下,这不是 Autofac 问题。 -
@Steven 我特别说过代理类型确实实现了
IServiceHost,因此代理也必须实现它。 -
Autofac 检查
host是否是IServiceHost,因为不是,Autofac 会抛出异常。 -
@Steven 这绝对是一个
IServiceHost——变量是一个方法参数并且作为IServiceHost host传入。 -
请注意,“SingleInstance”对“RegisterInstance”没有意义。毕竟,永远只有一个实例。不过不要认为这与您的错误有关。
标签: c# proxy appdomain autofac realproxy