2009-05-08 26 views
2

C#ではいくつかの標準機能を持ついくつかのWindowsサービスを開発していますので、この共通の機能を個別の参照ユーティリティプロジェクトに入れました。参照プロジェクトのクラスにアクセスするC##

私は、Activator.CreateInstanceを使用してユーティリティプロジェクトからWindowsサービスプロジェクトに存在するビジネスクラスのインスタンスを作成する必要がある状況があります。

私のユーティリティプロジェクトは、Type.GetType呼び出しの名前空間とクラス名を認識していますが、型は常にnullです。考えてみると、参照されているプロジェクトから型を取得できませんそれとも、できますか?

簡潔に:

プロジェクトA参照ユーティリティプロジェクト。
ユーティリティプロジェクトは、名前空間とクラス名を認識しているプロジェクトAからクラスを作成しようとしています。

この機能を達成するために私が従うべきデザインパターンまたはアプローチがありますか?または、これはいいえのように見えますか?いいえ、私はリファクタリングする必要がありますか?あなたが(それは厳密な名前だ場合、バージョンなどを含む)の完全修飾アセンブリ名を指定する必要が

+0

おかげdecupleします私は多分説明しなかったかもしれませんが、ユーティリティライブラリを使用するプロジェクトは、この状況でユーティリティを呼び出すことはありません。ユーティリティー・ライブラリーは、別のアプリケーションから発生したイベントに応答します。このイベントのパラメーターは、クラスの詳細を引き出すXMLメッセージです。クラスを作成したら、そのコンストラクタにパラメータとしてxmlを渡したかったのですが、コンストラクタではxmlを解析するprocessメソッドを呼び出します。だから、ユーティリティの一般的な方法私を助けるだろうか?再度、感謝します。 – SimonNet

答えて

1

を探しているため

おかげで、あなたはType.GetTypemscorlibまたは呼び出し元のアセンブリのいずれかにないタイプを検索する場合。例えば

// Prints nothing 
Console.WriteLine(Type.GetType("System.Linq.Enumerable")); 
// Prints the type name (i.e. it finds it) 
Console.WriteLine(Type.GetType("System.Linq.Enumerable, System.Core, " 
    + "Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")); 

また、このユーティリティプロジェクトでの一般的な方法で行い、型引数としてのタイプを指定するには、発信者を得ることができますか?

0

循環参照の問題のような音です。あなたはリファクタリングする必要があるかもしれません!

1

依存性注入/ iocコンテナを調べることができます。

たとえば、ユーティリティライブラリでインターフェイスを作成し、Windowsサービスの特定のクラスにインターフェイスを実装します。その後、インスタンスをユーティリティクラスに渡します。この方法では、ユーティリティライブラリはWindowsサービスについて何も知らない。

4

Jonが指摘したように、リフレクションを使用して循環参照問題を解決できますが、デザインを再考してリファクタリングすることをお勧めします。 2つの提案。

  • 使用インタフェースは、応答のためにAとB(好ま溶液)
  • AおよびB
  • からCと参照だけCにAとBが必要とする部分を移動
関連する問題