1

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

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

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

 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,但是如果没有直接在源代码中使用,似乎引用没有帮助。

有什么我完全错过的吗?如果没有直接使用源代码中的类型,程序集是否缺少元数据或其他内容?或者这个想法是否完全糟糕。

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

泰。

4

1 回答 1

0

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

于 2012-07-17T06:46:55.913 回答