2016-09-27 5 views
1

私はライセンスが必要なサードパーティのDLLをいくつか持っています。それは私自身のDLLから呼び出す必要があるいくつかのメソッドがあります。私のDLLはいくつかのプロジェクトで参照されており、私はすべてのホストに変更を加えたくありません。私のDLL内で、私のDLLにいくつかのメソッドを呼び出すことができる方法がありますか?静的なクラスやコンストラクタを追加するのと同じですが、ホストからそのクラスへの明示的な呼び出しをしないでください。私がそれを明確に説明しているかどうかはわかりません。必要に応じて質問してください。DLLにいくつかのコードを自動実行する方法はありますか?

ThirdPartyType license = new ThirdPartyType(); 
license.Load("license.xml"); 

これは私が私のDLLに配置して、同じDLL以内にそれを呼びたいライセンスコードの一部です。

+1

顧客が使用するクラスの静的コンストラクターで実行する必要があります。 – Maarten

+0

このコードは、独自のdllを参照するすべてのアセンブリから実行されますか? – HimBromBeere

+0

@Maarten、そうですが、私のDLLへの明示的な呼び出しなしでは...私はすべてのホストアプリケーションを変更したいとは思っていませんし、何とかドメインロードで呼びたいと思っています。すべて。 –

答えて

2

低レベルでは、ランタイムは "module initializers"をサポートしています。しかし、C#はそれらを実装する方法を提供していないので、あなたが管理できるのは静的なコンストラクタ( "型初期化子")または普通のコンストラクタだけです。

しかし、モジュール初期化子または型初期化子のどちらにライセンスをフックするかは、実行時がわからないため、おそらく、がアクセスしないコードに影響する可能性がありますあなたのライブ。あなたのライブラリがその時点で積極的に呼び出されていない場合は、特にのライセンスコードが不幸であると判断したため、誰かのアプリケーションをダウンさせるのはやめてしまいます。

次のように:これを行う最も適切な場所は、コンストラクタ、または施工後Initialize(...)の方法(有効な詳細が指定されていない限りツールの使用を拒否する)のいずれかにあることをお勧めします。

+0

ありがとうございました。私はそれが不可能だと思った。 –

関連する問題