登録されていないコンポーネントを使用しているWebサイトの一部が非常に悪い形式 であるため、Webサイト全体を爆撃します。
そのために、クラスの静的コンストラクターに何かを入れて、ライセンスをチェックし、ライセンス要件が見つからない場合は例外をスローすることができます。
public static MyComponent
{
static MyComponent()
{
// Check for licensing here.
if (!<licensing condition>)
{
// Bomb the app.
throw new InvalidOperationException("Component is not licensed.");
}
}
}
Webサイト全体を爆撃したい場合は、ASP.NETの外部でこれを実行し、ISAPIフィルターを記述して(管理されていないコードで実行する必要があることに注意してください)、インストールする必要があります。 IISサーバー。
または、IHttpModule
インターフェイスを実装することもできます。Init
メソッドの実装では、ライセンス要件を確認できます。要件が設定されていない場合は、次のように例外をスローします。
public class MyLicensingHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
// Check for licensing here.
if (!<licensing condition>)
{
// Bomb the app.
throw new InvalidOperationException("Component is not licensed.");
}
}
}
(まだ実装を登録するIHttpModule
必要があることに注意してください)
より良い解決策は実装することですが、ライブラリ/コンポーネントが必要に応じてIHttpModule
アクセスできるフラグを設定します。
public class MyLicensingHttpModule : IHttpModule
{
// Set when the application is initialized
public static IsLicensed { get; private set; }
public void Init(HttpApplication context)
{
// Check for licensing here. Set
// the flag accordingly.
IsLicensded = <licensing condition>;
}
}
その後、すべてのコンストラクターや静的コンストラクターでフラグがチェックされ、コンプライアンスが確保されます。
public class MyComponentA
{
static MyComponentA()
{
// Check here.
if (!MyLicensingHttpModule.IsLicensed)
{
// Bomb the *type*.
throw new InvalidOperationException(
"MyComponentA is not licensed.");
}
}
}
public class MyComponentB
{
public MyComponentB()
{
// Or check on a per-instance basis. You'd do
// this if you needed properties on the class level
// to be available regardless. This is the
// *less* likely scenario.
if (!MyLicensingHttpModule.IsLicensed)
{
// Bomb the *instance*.
throw new InvalidOperationException(
"MyComponentA is not licensed.");
}
}
}
これにより、モジュールが強制的にインストールされ(フラグが設定されていない場合、スローされる例外が発生します)、コンポーネントを使用するすべてのページリクエストにフックして、必要に応じて使用を防ぐことができます。
このルートを使用する場合、アプリケーション全体を爆撃するのは非常に悪い形であることを強調する必要があります。コンポーネントを使用するときは、コンポーネントに集中する必要があります。これは実際にはあなたの呼びかけではありません。
開発者があなたのコンポーネントを使用しない他のページを持っている一方で、うまくレンダリングされるはずの他の有料コンポーネントを使用している可能性が非常に高いです。
また、すべてのリクエストにフックする場合は、パフォーマンスに影響を与えるために何もしないようにする必要があります。それも悪い形になります。これが、フラグを一度設定してから、必要なときに簡単なチェックを行う理由です。