HOW TO:授權元件和控制項
.NET Framework 提供了對所有元件和控制項 (包括 Windows Form 控制項和 ASP.NET 伺服器控制項) 都相同並且與 Microsoft ActiveX® 控制項授權完全相容的授權模型。
透過授權方式,元件或控制項的作者可以藉由驗證開發人員是否經過授權才使用元件或控制項來保護其智慧財產。 這項驗證對於將元件或控制項加入到應用程式的設計階段,會比在執行階段時更為重要。 如果開發人員在設計階段合法使用您授權的元件或控制項,那麼開發人員的應用程式就能取得執行階段的授權,可以自由散發應用程式。
透過授權模型,您可以獲得許多其他等級的授權支援。 這個模型將驗證邏輯和元件或控制項加以分隔, 由授權提供者給予授權並執行驗證邏輯。 提供者是由 System.ComponentModel.LicenseProvider 衍生而來的類別。 啟用授權所必須採取的步驟,其實相當簡單。
當您使用由 LicFileLicenseProvider 所提供之 LicenseProvider 的預設實作時,授權檔的格式如下:
檔案名稱必須是含有副檔名 .LIC 的完整類別名稱,包括命名空間在內。 例如:
Namespace1.Class1.LIC
授權檔的內容應包含下列文字字串:
"myClassName 為授權的元件"。
myClassName 為完整的類別名稱。 例如:
「Namespace1.Class1 為授權的元件。」
在下列程式碼範例中,會顯示一個 Windows Form 控制項和一個 ASP.NET 伺服器控制項,用來實作簡單的授權案例。
若要啟用元件或控制項的授權
將 LicenseProviderAttribute 套用至類別。
在類別完成項中 (或在呼叫完成項之前) 呼叫任何授與之使用權上的 Dispose。
下列程式碼範例會使用內建的授權提供者類別 LicFileLicenseProvider,它可以讓您使用文字授權檔並且模擬 COM (ActiveX) 授權的行為。 較複雜的授權案例 (例如呼叫 XML Web Service 來限制元件的執行個體數目) 則需要不同類型的授權提供者。
範例
Imports System
Imports System.ComponentModel
Imports System.Windows.Forms
' Adds the LicenseProviderAttribute to the control.
<LicenseProvider(GetType(LicFileLicenseProvider))> _
Public Class MyControl
Inherits Control
' Creates a new, null license.
Private license As License = Nothing
Public Sub New()
' Adds Validate to the control's constructor.
license = LicenseManager.Validate(GetType(MyControl), Me)
' Insert code to perform other instance creation tasks here.
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If (license IsNot Nothing) Then
license.Dispose()
license = Nothing
End If
End If
End Sub
End Class
using System;
using System.ComponentModel;
using System.Windows.Forms;
// Adds the LicenseProviderAttribute to the control.
[LicenseProvider(typeof(LicFileLicenseProvider))]
public class MyControl : Control
{
// Creates a new, null license.
private License license = null;
public MyControl ()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(typeof(MyControl), this);
// Insert code to perform other instance creation tasks here.
}
protected override void Dispose(bool disposing)
{
if(disposing)
{
if (license != null)
{
license.Dispose();
license = null;
}
}
}
}
// Adds the LicenseProviderAttribute to the control.
[LicenseProvider(LicFileLicenseProvider::typeid)]
public ref class MyControl: public Control
{
// Creates a new, null license.
private:
License^ license;
public:
MyControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager::Validate( MyControl::typeid, this );
// Insert code to perform other instance creation tasks here.
}
public:
~MyControl()
{
if ( license != nullptr )
{
delete license;
license = nullptr;
}
}
};
Imports System
Imports System.ComponentModel
Imports System.Web.UI
' Adds the LicenseProviderAttribute to the control.
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
' Creates a new, null license.
Private license As License
Public Sub New()
' Adds Validate to the control's constructor.
license = LicenseManager.Validate(GetType(MyControl), Me)
' Insert code to perform other instance creation tasks here.
End Sub
Public Overrides Sub Dispose()
If (license IsNot Nothing) Then
license.Dispose()
license = Nothing
End If
MyBase.Dispose()
End Sub
End Class
using System;
using System.ComponentModel;
using System.Web.UI;
// Adds the LicenseProviderAttribute to the control.
public class MyServerControl : Control
{
// Creates a new, null license.
private License license = null;
public MyServerControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(typeof(MyServerControl), this);
// Insert code to perform other instance creation tasks here.
}
public override void Dispose()
{
if (license != null)
{
license.Dispose();
license = null;
}
base.Dispose();
}
}