通用远程处理层

时间:2012-07-17 06:34:33

标签: c# generics remoting

我目前正在处理使用已定义层通过远程处理发送消息的项目,目前它正在工作,以便所有数据访问方法都包含在该层内。例如:

public class RemoteLayer: MarshalByRefObject
{
    DataAccessThing1() 
    {
         //Do things
    }

然而,随着时间的推移,这些层变得非常庞大。我虽然可以创建通用工厂来询问来自其他appdomain的远程对象:

 public class Abc : MarshalRefObject // This layer also residues in server, to its remoted.

 public T Factory<T> ()
 {
   return (T) Activator.CreateInstance(typeof(T));
 }

我虽然可以在客户端像这样使用它:

var fooDA = _remoteLayer.Factory<DataAccessClassForFoo>();
var Foo = FooClass(FooDA); // Now class uses data access over remote layer.

但是,仅此一项不起作用。它只适用于我在工厂中添加对源类型的直接引用。例如:

private ExampleType Foo() { return null; }  // This method is unused.
public T Factory<T> ()
{
   return (T) Activator.CreateInstance(typeof(T));
}

这很有效。示例类型引用于程序集,它可以正常工作。如果没有直接调用键入由于某种原因我得到错误:无法加载文件或程序集'AssemblyForExampleType',版本...

我为所有要投影的案例引用了AssemblyForExampleType,但是在源代码中没有直接使用它似乎没有帮助。

有什么东西我完全错过了吗?汇编是否缺少元数据或某些东西而没有在源中直接使用类型?或者无论如何这个想法完全不好。

我已经尝试过使用T:ExampleType,但是,现在每个界面的使用者都需要引用所有在之后定义的类型,我真的不想要...

1 个答案:

答案 0 :(得分:0)

尝试在使用远程处理之前加载'AssemblyForExampleType'程序集:Assembly.Load