授權元件和控制項
.NET Framework 提供對所有元件 (包括 Windows Form 控制項和 ASP.NET 伺服器控制項) 都相同並且與 Microsoft ActiveX® 控制項授權完全相容的授權模型。
授權可以讓控制項作者藉由檢查使用者是否獲得使用該控制項的授權,來保護具有智慧財產權的屬性。這項檢查對於將控制項加入到應用程式的設計階段,會比在 Run Time 時更為重要。當授權的控制項在設計階段被合法的使用時 (除此之外也不可能以其他方式使用),應用程式就會取得可以自由散發的 Run-Time 授權。
授權模型也允許藉由從元件或控制項分隔驗證邏輯的許多其他授權等級支援。使用權授予和驗證邏輯是由授權提供者執行,它是一個從 System.ComponentModel.LicenseProvider 衍生的類別。元件作者啟用授權所必須採取的步驟,其實相當簡單。
啟用元件的授權
- 將 LicenseProviderAttribute 套用至類別。
- 呼叫建構函式 (Constructor) 中的 LicenseManager.Validate 或 LicenseManager.IsValid。
- 在類別完成項中 (或在呼叫完成項之前) 呼叫任何授予之使用權上的 Dispose。
下列範例所示為實作簡單授權案例的 Windows Form 控制項。
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
protected override void Dispose(bool disposing) {
if (disposing) {
if (license != null) {
license.Dispose();
license = null;
}
}
base.Dispose(disposing);
}
~MyControl() {
Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overloads Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
下列範例所示為實作簡單授權案例的 ASP.NET 伺服器控制項。
using System;
using System.ComponentModel;
using System.Web.UI;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
public override void Dispose() {
if (license != null) {
license.Dispose();
license = null;
}
base.Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
這裡顯示的這些範例是使用內建的授權提供者類別 LicFileLicenseProvider,它可以讓您使用文字授權檔並且模擬 COM (ActiveX) 授權的行為。較複雜的授權案例 (例如呼叫 XML Web Service 來限制元件的執行個體數目) 則需要不同種類的授權提供者。
在 Windows Form 快速入門的<建置應用程式>-><建立控制項>-><授權控制項>之下提供了授權的範例。