【问题标题】:Autofac and Cross-AppDomain ProxiesAutofac 和跨 AppDomain 代理
【发布时间】: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


【解决方案1】:

您应该能够使用带有.Register() 方法的lambda,而不是.RegisterInstance(),来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2011-01-24
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多