このライブラリの使用が素晴らしいと思われる方は、 #9
と言ってください。 更新キーが強化された場合に私に注文することは付加価値です。
この無料の配信ソース .NET ライブラリを使用すると、無料ではないアプリケーションのライセンスを取得できます。
無料。 簡単に利用できます。 ライセンス記録データがありません。 すべての部分はコード内で XML 文書化されているため、IntelliSense は任意のメンバーに関するすべての情報にタグを付けることができます.
このライブラリの使用のすべての側面について学ぶための画像、またはそれを見てみたい場合は、最後にメモワール ディレクトリ を参照してください。 )Licensing.ActivationKeys.Exams
には、このライブラリ用に作成されたユニット評価が含まれています。
このライブラリに入れる最高のテクニックNuGetの使用です。 ミッション名を実際にクリックすると、Visual Studio のソリューション エクスプローラーが表示されます。「NuGet アプリケーションを配置する」という可能性を見つけ、パッケージ「SNBS.Licensing.ActivationKeys」をセキュリティで保護してインストールします。 または、Install-Package
-
Client.cs
の使用に注意してください. Client.cs( の使用に関するホット ライセンスの概念。 これにより、ミューズで
Admin.cs
の CLI に入力したパラメーターにタグが付けられる可能性があります。 あなたはデータベースをピックアップすることさえ決心しません。 例は私の所有するものに結合します。 すぐに配信できるかどうかは問題ではありませんが、産業用の場合は、自分でデータベースをホストすることをお勧めします。たとえば、
FreeSQL データベース
。 もう広告じゃない
使用例 クライアント.GetCurrentLicenseは LicensingClient
の使用 ベロー、完全に無料ではないアプリがあり、そのライセンスを促進しようとしていますアクティベーションキーで起動します。
次に、
LicensingClient を配信します 基本的なプロットで。 これにより、アプリのバージョン全体または「ライセンスが失効しました」というメッセージが表示されるかどうかが解決される可能性があります。 解決策は、レジストリのライセンス構成 (以下の提案を参照して、複雑な操作なしでライセンスを構成する) とその使いやすさ (
LicensingClient
に依存します。 構成されたアクティベーション シークレットが正当であるかどうかを確認するために、データベースに登録されているようです)。タグ付けしてください
LicensingClient
でレジストリ キーを開くしたがって、管理者権限が必要です。 それらが提供されていない場合、 RegistryAccessException
がスローされる可能性が高くなります。 アクセスできないレジストリ キーは、キー InaccessibleRegistryKey
. の下の例外データに保存される可能性が高くなります。- args) { LicensingClient.Start( "YourConnectionString", "YourProductName", false, null, client=> { // 全体のバージョンを作成する }, (client, usability)=> { // アプリのライセンスがめったにない場合に確保するもの} ); }" dir="auto">
の用法
SNBS.
ライセンス; //
... 公共
静的 空所 不可欠(弦 args) { LicensingClient .元ネタ( "YourConnectionString 」
- 、"あなたの商品名
"、不正,
ヌル、 クライアント => {
// 全体版を作成する }, (クライアント、 ユーザビリティ y)
=> { //
アプリがほとんどライセンスされていない場合に確保するもの } ); } このコードを分析してみましょう。 Manner
Originate
DatabaseException がスローされる可能性が高くなります。は静的です。 最初のパラメーターでは、データベースへの接続文字列を受け取ります。 提供された接続文字列が無効である場合、またはデータベース構造が無効である場合 (正当な構造は上にあります)、 2 番目のパラメーターでは、ミッションの名前を渡します —ライセンスデータをレジストリに保存することは薄れています(別の場所にあるまったく異なる販売店のライセンス)
3 番目のパラメーターは
bool
の形式です。 LicensingClient
が、MySQL への参加を試みて目標を達成できるかどうかを指定します (が 不正
である場合、クライアントは MS SQL Server への参加を試みます)。 upright
の場合は、4 番目のパラメーター (の Model?
) を MySQL のバージョンに変換します。 MS SQL Server が衰退している場合、このパラメーターは、目標がnull
になる可能性もあります。 3 番目のパラメーターが upright
の場合でも、4 番目のパラメーターは です。 null 、 ArgumentException
が投げられます.
3 番目のパラメーターの形式は
アクション
であり、製品に正当なライセンスがある場合に実行されます。 それに渡された LicensingClient
インスタンスは、ライセンスを取得するためにフェードされる可能性が最も高い可能性があります。 、製品を再アクティブ化/非アクティブ化し、アクティベーション キーを検証します (それらを使用せずに)。 4 番目のパラメーターの形式は
Action
割り当てを実行すると、ライセンスがないか、無効なライセンス (最新の製品のレジストリに構成されている) が存在する可能性があります)。 渡された LicensingClient
期限切れは、パラグラフ 4 で説明されているのと同じことで、目標がフェードされる可能性もあります。 . LicenseUsability
は、ライセンスが使用可能である理由を説明する列挙です/使用できません。 その値は次のとおりです:使用可能
,,
NotFound
、TooManyDevices
(各ライセンスはチャンスごとに目標にもなる可能性があります制限された数のデバイスによって薄れ、作成されたときにピクル) と NoConfiguredLicense
。 彼らはまた、直感的であることを目標にしています。 ( NotFound
と NoConfiguredLicense の間の適応
—NotFound
潜在的なライセンスは構成されていますが、ライセンス データベースには存在しませんNoConfiguredLicense
可能性があります どんな賞賛にもライセンスはありません .)
価値があることを示してください
NoConfiguredLicense
は、 GetCurrentLicense() を除いて、どのプロットでも返すことができません
、および値TooManyDevices
は、 plot ActivateProduct
によって生産性が返されます (以下を参照). これは基本的にライブラリの最も典型的な使い方でした。他のシステムです。たとえば、
LicensingClient
y を形成する可能性があります。 自分自身 (前の例のように、接続文字列、製品名、MySQL を使用するかどうか、および MySQL のバージョンを指定します): の用法 (var クライアント= 個性的 LicensingClient
("YourConnectionString", "あなたの商品名",
不正,
ヌル)) { var 使用感 =
まず、ライセンスを格納するデータベースを解決します。 このライブラリは、MS SQL Server と MySQL をサポートしています。 住居 Windows Azure から FreeSQLDatabase (MySQL 5.0.12 を使用)。 もはや広告ではありません。 データベースを起動した後、もちろん空になりますが、このライブラリは自動的にそれを取得します. 接続文字列を取得し、次の手順に進みます.
().使いやすさ; もしも (
使いやすさ !=- ライセンスの使いやすさ
.使える ) { ShowMessage ("あなたの免許証
" + (使いやすさ==ライセンスの使いやすさ.
期限切れ) ? "期限切れです"
: ( 使いやすさ
==ライセンスの使いやすさ
。見つかりません) ? "以前はキャンセルされていました " :
(ユーザビリティ
==ライセンスの使いやすさ.NoConfiguredLicense)
このレポジトリを追加でクローン (または緑色の「コード」ボタンを使用して確保) し、アセンブルして、への参照を追加することができます。あなたの使命のためにコンパイルされたアセンブリ.
あなたがこのライブラリを見てみる立場にあるということフォルダー examples
Admin.cs
Client を取得します。 cs
、それらをコンソール アプリにアセンブルし、
喧噪 Admin.cs を作成し、その CLI を使用するためのライセンスを作成します
- 作成したライセンスの基本を購入してください。
? 」以前は構成が壊れていました" : "以前は壊れていました 」); } }
LicensingClient
GetCurrentLicense()
LicenseInfo
)。 1 つのライセンスに関する詳細なデータで構成されていることが明らかになることも考えられます。 そのプロパティは次のとおりです。
フォーム 文字列のキー?;フォームの有効期限 DateTime?
(最も生産的な日付が保存されます。 DateTime
ではなく DateOnly
以前は Entity Framework のマッピング メカニズムによりフェードされていました);形状
LicenseType?
(値を含む列挙型) の形式トライアル、合計
、合法
);フォームの使いやすさ LicenseUsability (その他すべてのプロップ erties が null になる可能性が高いのは、これがLicenseUsability.Usable
). アクティベーションキーの利用強化しよう以前の例。 全体として、アプリケーションは、ホット ライセンスが使用できない場合に、使用を中止したユーザーにそれらを相殺する目的で蓄積されたクエリを実行する可能性もあります。 LicensingClient
の対応するプロットは と考えられます。 ActivateProduct()
。 新しくアクティベートされたライセンスに関する情報を含む LicenseInfo を返します (もちろん、最もアクティベートされているライセンスです)。
に関する警告を無視する) null
は、LicenseInfo のプロパティを使用する場合に参照します。 可能な限り、Usability
プロパティが と等しいことも明確になります。 LicenseUsability.Usable
、 の使用を安全に抑制できる可能性があります。 pragma.
の用法 (var
クライアント = 個性的 LicensingClient(" あなたの接続文字列", "
あなたの商品名")) { var使いやすさ=
クライアント。GetCurrentLicense().使いやすさ ); もしも (使いやすさ != ライセンスの使いやすさ .使える ) { ShowMessage ("あなたの免許証" + (使いやすさ==ライセンスの使いやすさ.
期限切れ) ? "期限切れです"
: ( 使いやすさ
==ライセンスの使いやすさ
。見つかりません) ? "以前はキャンセルされていました " :
(ユーザビリティ
==ライセンスの使いやすさ.NoConfiguredLicense)
? 」以前は構成が壊れていました" : "以前は壊れていました 」); 弦 鍵
=AskUser ("アクティベーションキーを入力してください 」); var 情報=クライアント.ActivateProduct (鍵); もしも (情報.使いやすさ == ライセンスの使いやすさ .使える ) { ShowMessage("ライセンス取得成功アクティブ化! 有効期限は " + 情報。有効期限?.ToShortDateString()); } それ以外 {ShowMessage ("オフしようとしてエラーが発生しました。ライセンス "
+ (情報。使いやすさ
== ライセンスの使いやすさ.期限切れ) ? "期限切れです" : (情報.使いやすさ ==ライセンスユーザビリティ.
見つかりません) ? "以前はキャンセルされていました"
: (情報。ユーザビリティ==
ライセンスの使いやすさ.TooManyDevices ) ?
"かつては薄れていたデバイスが多すぎます
" : 」以前は壊れていました"); } } } コード内に XML として文書化された他の (流行に左右されない) メンバーがあります。 (さらに、ディレクトリ Licensing.ActivationKeys.Exams のユニット評価も参照してください。これらは正しいドキュメントです。)
の用法 LicenseValidator
LicenseValidator
チャンスによっても目標もフェードする可能性がありますデータ (LicenseInfo) を取得するには、ホット マシンで練習することなく、2 つのライセンスを取得します。 . その最も生産的なプロットは ValidateLicense です ( の提案を除く) Machine.Object
).
高度な使い方はめったにありません.
ライセンスを検証しましょう。 ここでは MySQL を使用して、この機能にタグを付けます:の用法 (var バリデーター = 個性的 LicenseValidator ("サーバ=sql7. )freesqldatabase.com;
データベース=
sql7594998 ; Uid=sql7594998 ; Pwd=l2TZZAQ5hB"、直立 , 個性的 モデル(5
, 0、12 ))) { var 情報 = バリデーター. ValidateLicense( "
AAAAAA-AAAAAA-AAAAAA -AAAAAA-AAAAAA"); もしも (情報.使いやすさ == ライセンスの使いやすさ .使える ) { ShowMessage("本ライセンス合法です」); } }
上記のコードを実行するたびに、ホストされている私の所有データベースに参加しますFreeSQLDatabaseで。 もはや広告ではありません。 このキャリアは、無料で簡単に利用できるため、色あせています。 所有データベースがホストされている場合は、接続文字列の値を電子メールの値に置き換えます。
LicenseValidator はレジストリを処理しないため、管理者権限は必要ないようです
コンストラクターは、ライセンス データベースへの接続文字列 bool
MySQL を使用するかどうかを示す値と MySQL のバージョン (色あせている場合)、優れた LicensingClient
コンストラクタですが、製品名を指定していません。
マナーValidateLicense はライセンスを取得します e はその最も生産的な引数でキーを入力し、そのライセンスを表す LicenseInfo を返します。
の用法LicensingAdmin
または、ライセンスを検証して実践する立場になった後、それは正しいですが、CRUD (Fetch 、Learn、Update、Delete) 操作が追加で望まれます。 マイル LicensingAdmin です。 そのインスタンスは、製品名を指定しなくても、おそらく優れた LicensingClient インスタンスを作成することもできます。 Originate プロットなし
ライセンスを作りましょうの用法 (var 管理者 = 個性的 LicensingAdmin ("YourConnectionString",
詐欺, ヌル)) { var 情報=管理者.ライセンスの作成(日付時刻。現時点で。AddDays(20), ライセンスの種類 。トライアル、1); ShowMessage (
" 新しく作成したライセンスは 」 + 情報。鍵); } 分析。 Manner CreateLicense() は 3 つのパラメーターを受け取ります。 原則的なものは、希望するライセンスの種類 (LicenseType 列挙の値) です。 2 つ目は、有効期限を表す DateTime
オブジェクトです。 3つ目は、基本的にライセンスを使用できるデバイスの数(instant
)が最も多いものです.
返されるオブジェクトは LicenseInfo
は一意のライセンスを表します。 この場合の最も一般的な使用法は、一意のライセンスの (ランダムに生成された) キーを取得することです。
確かに、LicensingAdmin
は追加でライセンスを更新および削除できます.
の用法 (var 管理者
= 個性的 LicensingAdmin("YourConnectionString "、詐欺 、 ヌル)) { var 情報=管理者.UpdateLicense("AAAAAA-AAAAAA-
AAAA- AAAA-AAAA", ヌル、 ライセンスの種類.合法 、10); ShowMessage (
"ライセンス " + 情報。鍵 + " の形になりました" + 情報。形状。ToString() + "
ゴールもできます aded by (most) "
+ 情報。MaxDevices. ToString()
+ "
デバイス )"
); }Manner UpdateLicense
は 4 つの引数を受け取ります。 原則的なものは、基本的に更新するライセンスの中で最も重要です。 DateTime? (有効期限), LicenseType? (フォーム) and instant? (使用するデバイスの最大数ライセンスの)。 これらは固有のライセンス パラメータです。 以前はあったため、パラメーターを非表示にするための図では、対応する引数に null を渡します。
返されるフォームは LicenseInfo
これまでのライセンスが不要になったことを考慮に入れましょう。 たまたま積み上げたゴールが削除される可能性もあります:
の用法 (var 管理者=個性的 LicensingAdmin("YourConnectionString", 詐欺, ヌル)) { var 情報 = 管理者 .DeleteLicense("AAAAAA
-AAAAAA -AAAAAA -AAAAAA -AAAAAA"); ShowMessage ("ライセンス " + 情報。鍵 + " は以前は削除されていました."); }最も魅力的な議論は、基本的に削除するライセンスの最も重要なものです。 返される形式は LicenseInfo で、削除されたライセンスに関するデータが格納されています。 キャスト
クラス LicensingClient
、LicenseValidator
、および LicensingAdmin
は同じデータベースを処理しますが、まったく異なる機能を提供します。 そのため、それらの間に明示的なキャストを定義しました:
の用法 (var- 管理者
= 個性的 LicensingAdmin ("YourConnectionString", 詐欺, ヌル)) { // 使ってください var バリデーター = (LicenseValidator)
管理者; var 情報
=バリデーター .ValidateLicense ("AAAAAA-AAAAAA-AAAAAA-AAAAAA-AAAAAA" ); } 話題になっているクラスを、あなたが尊敬する別のクラスに変換する立場にいるだけですが、おそらく変換しない可能性があります LicenseValidator から LicensingClient
および LicensingAdmin
から LicensingClient (なぜなら LicensingClient アドベントの製品名を希望します。これは、他のクラスから取ることはできません)。 ただし、おそらくそのために LicensingClient コンストラクターを使用する可能性があります:
var 管理者 = 個性的 LicensingAdmin ("YourConnectionString"、不正 、 ヌル); var クライアント
=個性的 LicensingClient (管理者、 "あなたの商品名 "
);
上記のコードは、MySQL の使用状況に関する接続文字列とデータを LicensingAdmin インスタンス (場合によっては、さらに を渡す可能性がありますLicenseValidator
インスタンス).
廃棄マイルです 非常に処分することで知られている LicensingClient 、LicenseValidator および LicensingAdmin
使用後
ライセンス データベースへの接続が閉じられるため Dispose()
と思われます。 話題になっているクラス IDisposable が有効になっているため、おそらく使用する可能性があります を呼び出す代わりに 演算子を使用するDispose()
自分で
LicensingClient
のすべての提案、LicenseValidator
および LicensingAdmin ライセンス データベースへのサルベージ エントリは、TAP 非同期バリエーションを持っています (接尾辞 Async を返し、Process
または を返す*)プロセス
)。 ついつい狙って使いたくなってしまいそうです:の用法 (var クライアント
=個性的 LicensingClient("YourConnectionString", "あなたの商品名", 詐欺, ヌル)) { var 情報=お世話になっております クライアント. ActivateProductAsync("AAAAAA- AAAAAA- AAAA- AAAAAA-AAAA"); }
試験ユニット評価では、空の LocalDB データベースが必要です。 まず、このライブラリを形成させてから、この上のフォルダー Licensing.ActivationKeys.Exams/Queries に移動します。 DBMS が MS SQL Server の場合、リポジトリとジャーニー クエリ PopulateSQLServer.sql をデータベースに追加します。 MySQLの場合、ジャーニークエリPopulateMySQL.sqlを同じフォルダに。 評価のフィードバックで指示を適用してください!
% %item_read_more_button%%
文字列のキー?;フォームの有効期限 DateTime?
(最も生産的な日付が保存されます。 DateTime
ではなく DateOnly
以前は Entity Framework のマッピング メカニズムによりフェードされていました);形状
LicenseType?
(値を含む列挙型) の形式トライアル、合計
、合法
);フォームの使いやすさ LicenseUsability (その他すべてのプロップ erties が null になる可能性が高いのは、これがLicenseUsability.Usable
). アクティベーションキーの利用強化しよう以前の例。 全体として、アプリケーションは、ホット ライセンスが使用できない場合に、使用を中止したユーザーにそれらを相殺する目的で蓄積されたクエリを実行する可能性もあります。 LicensingClient
の対応するプロットは と考えられます。 ActivateProduct()
。 新しくアクティベートされたライセンスに関する情報を含む LicenseInfo を返します (もちろん、最もアクティベートされているライセンスです)。
に関する警告を無視する) null
は、LicenseInfo のプロパティを使用する場合に参照します。 可能な限り、Usability
プロパティが と等しいことも明確になります。 LicenseUsability.Usable
、 の使用を安全に抑制できる可能性があります。 pragma.
の用法 (var
クライアント = 個性的 LicensingClient(" あなたの接続文字列", "
あなたの商品名")) { var使いやすさ=
クライアント。GetCurrentLicense().使いやすさ ); もしも (使いやすさ != ライセンスの使いやすさ .使える ) { ShowMessage ("あなたの免許証" + (使いやすさ==ライセンスの使いやすさ.
期限切れ) ? "期限切れです"
: ( 使いやすさ
==ライセンスの使いやすさ
。見つかりません) ? "以前はキャンセルされていました " :
(ユーザビリティ
==ライセンスの使いやすさ.NoConfiguredLicense)
? 」以前は構成が壊れていました" : "以前は壊れていました 」); 弦 鍵
=AskUser ("アクティベーションキーを入力してください 」); var 情報=クライアント.ActivateProduct (鍵); もしも (情報.使いやすさ == ライセンスの使いやすさ .使える ) { ShowMessage("ライセンス取得成功アクティブ化! 有効期限は " + 情報。有効期限?.ToShortDateString()); } それ以外 {ShowMessage ("オフしようとしてエラーが発生しました。ライセンス "
+ (情報。使いやすさ
== ライセンスの使いやすさ.期限切れ) ? "期限切れです" : (情報.使いやすさ ==ライセンスユーザビリティ.
見つかりません) ? "以前はキャンセルされていました"
: (情報。ユーザビリティ==
ライセンスの使いやすさ.TooManyDevices ) ?
"かつては薄れていたデバイスが多すぎます
" : 」以前は壊れていました"); } } } コード内に XML として文書化された他の (流行に左右されない) メンバーがあります。 (さらに、ディレクトリ Licensing.ActivationKeys.Exams のユニット評価も参照してください。これらは正しいドキュメントです。)
の用法 LicenseValidator
LicenseValidator
チャンスによっても目標もフェードする可能性がありますデータ (LicenseInfo) を取得するには、ホット マシンで練習することなく、2 つのライセンスを取得します。 . その最も生産的なプロットは ValidateLicense です ( の提案を除く) Machine.Object
).
高度な使い方はめったにありません.
ライセンスを検証しましょう。 ここでは MySQL を使用して、この機能にタグを付けます:の用法 (var バリデーター = 個性的 LicenseValidator ("サーバ=sql7. )freesqldatabase.com;
データベース=
sql7594998 ; Uid=sql7594998 ; Pwd=l2TZZAQ5hB"、直立 , 個性的 モデル(5
, 0、12 ))) { var 情報 = バリデーター. ValidateLicense( "
AAAAAA-AAAAAA-AAAAAA -AAAAAA-AAAAAA"); もしも (情報.使いやすさ == ライセンスの使いやすさ .使える ) { ShowMessage("本ライセンス合法です」); } }
上記のコードを実行するたびに、ホストされている私の所有データベースに参加しますFreeSQLDatabaseで。 もはや広告ではありません。 このキャリアは、無料で簡単に利用できるため、色あせています。 所有データベースがホストされている場合は、接続文字列の値を電子メールの値に置き換えます。
LicenseValidator はレジストリを処理しないため、管理者権限は必要ないようです
コンストラクターは、ライセンス データベースへの接続文字列 bool
MySQL を使用するかどうかを示す値と MySQL のバージョン (色あせている場合)、優れた LicensingClient
コンストラクタですが、製品名を指定していません。
マナーValidateLicense はライセンスを取得します e はその最も生産的な引数でキーを入力し、そのライセンスを表す LicenseInfo を返します。
の用法LicensingAdmin
または、ライセンスを検証して実践する立場になった後、それは正しいですが、CRUD (Fetch 、Learn、Update、Delete) 操作が追加で望まれます。 マイル LicensingAdmin です。 そのインスタンスは、製品名を指定しなくても、おそらく優れた LicensingClient インスタンスを作成することもできます。 Originate プロットなし
ライセンスを作りましょうの用法 (var 管理者 = 個性的 LicensingAdmin ("YourConnectionString",
詐欺, ヌル)) { var 情報=管理者.ライセンスの作成(日付時刻。現時点で。AddDays(20), ライセンスの種類 。トライアル、1); ShowMessage (
" 新しく作成したライセンスは 」 + 情報。鍵); } 分析。 Manner CreateLicense() は 3 つのパラメーターを受け取ります。 原則的なものは、希望するライセンスの種類 (LicenseType 列挙の値) です。 2 つ目は、有効期限を表す DateTime
オブジェクトです。 3つ目は、基本的にライセンスを使用できるデバイスの数(instant
)が最も多いものです.
返されるオブジェクトは LicenseInfo
は一意のライセンスを表します。 この場合の最も一般的な使用法は、一意のライセンスの (ランダムに生成された) キーを取得することです。
確かに、LicensingAdmin
は追加でライセンスを更新および削除できます.
の用法 (var 管理者
= 個性的 LicensingAdmin("YourConnectionString "、詐欺 、 ヌル)) { var 情報=管理者.UpdateLicense("AAAAAA-AAAAAA-
AAAA- AAAA-AAAA", ヌル、 ライセンスの種類.合法 、10); ShowMessage (
"ライセンス " + 情報。鍵 + " の形になりました" + 情報。形状。ToString() + "
ゴールもできます aded by (most) "
+ 情報。MaxDevices. ToString()
+ "
デバイス )"
); }Manner UpdateLicense
は 4 つの引数を受け取ります。 原則的なものは、基本的に更新するライセンスの中で最も重要です。 DateTime? (有効期限), LicenseType? (フォーム) and instant? (使用するデバイスの最大数ライセンスの)。 これらは固有のライセンス パラメータです。 以前はあったため、パラメーターを非表示にするための図では、対応する引数に null を渡します。
返されるフォームは LicenseInfo
これまでのライセンスが不要になったことを考慮に入れましょう。 たまたま積み上げたゴールが削除される可能性もあります:
の用法 (var 管理者=個性的 LicensingAdmin("YourConnectionString", 詐欺, ヌル)) { var 情報 = 管理者 .DeleteLicense("AAAAAA
-AAAAAA -AAAAAA -AAAAAA -AAAAAA"); ShowMessage ("ライセンス " + 情報。鍵 + " は以前は削除されていました."); }最も魅力的な議論は、基本的に削除するライセンスの最も重要なものです。 返される形式は LicenseInfo で、削除されたライセンスに関するデータが格納されています。 キャスト
クラス LicensingClient
、LicenseValidator
、および LicensingAdmin
は同じデータベースを処理しますが、まったく異なる機能を提供します。 そのため、それらの間に明示的なキャストを定義しました:
の用法 (var- 管理者
= 個性的 LicensingAdmin ("YourConnectionString", 詐欺, ヌル)) { // 使ってください var バリデーター = (LicenseValidator)
管理者; var 情報
=バリデーター .ValidateLicense ("AAAAAA-AAAAAA-AAAAAA-AAAAAA-AAAAAA" ); } 話題になっているクラスを、あなたが尊敬する別のクラスに変換する立場にいるだけですが、おそらく変換しない可能性があります LicenseValidator から LicensingClient
および LicensingAdmin
から LicensingClient (なぜなら LicensingClient アドベントの製品名を希望します。これは、他のクラスから取ることはできません)。 ただし、おそらくそのために LicensingClient コンストラクターを使用する可能性があります:
var 管理者 = 個性的 LicensingAdmin ("YourConnectionString"、不正 、 ヌル); var クライアント
=個性的 LicensingClient (管理者、 "あなたの商品名 "
);
上記のコードは、MySQL の使用状況に関する接続文字列とデータを LicensingAdmin インスタンス (場合によっては、さらに を渡す可能性がありますLicenseValidator
インスタンス).
廃棄マイルです 非常に処分することで知られている LicensingClient 、LicenseValidator および LicensingAdmin
使用後
ライセンス データベースへの接続が閉じられるため Dispose()
と思われます。 話題になっているクラス IDisposable が有効になっているため、おそらく使用する可能性があります を呼び出す代わりに 演算子を使用するDispose()
自分で
LicensingClient
のすべての提案、LicenseValidator
および LicensingAdmin ライセンス データベースへのサルベージ エントリは、TAP 非同期バリエーションを持っています (接尾辞 Async を返し、Process
または を返す*)プロセス
)。 ついつい狙って使いたくなってしまいそうです:の用法 (var クライアント
=個性的 LicensingClient("YourConnectionString", "あなたの商品名", 詐欺, ヌル)) { var 情報=お世話になっております クライアント. ActivateProductAsync("AAAAAA- AAAAAA- AAAA- AAAAAA-AAAA"); }
試験ユニット評価では、空の LocalDB データベースが必要です。 まず、このライブラリを形成させてから、この上のフォルダー Licensing.ActivationKeys.Exams/Queries に移動します。 DBMS が MS SQL Server の場合、リポジトリとジャーニー クエリ PopulateSQLServer.sql をデータベースに追加します。 MySQLの場合、ジャーニークエリPopulateMySQL.sqlを同じフォルダに。 評価のフィードバックで指示を適用してください!
% %item_read_more_button%%