私は現在、定義されたレイヤーを使用してリモート処理でメッセージを送信するプロジェクトに取り組んでいます。現在、すべてのデータアクセスメソッドがそのレイヤー内にラップされるように機能しています。例:
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 の後に定義されたすべてのタイプを参照する必要があります。
タイ。