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 に答える