我目前正在处理使用已定义层通过远程处理发送消息的项目,目前它正在工作,以便所有数据访问方法都包含在该层内。例如:
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,但是,现在每个界面的使用者都需要引用所有在之后定义的类型,我真的不想要...
泰