解讀.Net實(shí)現(xiàn)程序的插件機(jī)制_.Net教程
推薦:解讀軟件系統(tǒng)與軟件系統(tǒng)之間的集成交互問題可能寫得有些亂,希望能諒解,同時(shí)我整理的思想,希望能給您帶來一些啟發(fā)或者幫助。 我們假設(shè)一個(gè)國(guó)際化的大公司里,有來自多個(gè)國(guó)家的員工,這些員工又工作在不同的部門里,負(fù)責(zé)不同的任務(wù)。 首先: 1. 這些人可能是白人,也可能是黑人,也可能是黃皮膚的我
使用asp.net或vb.net或C#.net均可以實(shí)現(xiàn)插件的功能,插件的作用是對(duì)系統(tǒng)的后期未知擴(kuò)展預(yù)留快速升級(jí)的空間!插件開發(fā)完成后將以DLL的形式發(fā)布到特定的文件夾中,例如主程序文件夾是D:\myApp\myApp.exe,我們可以在D:\myApp中定義文件夾D:\myApp\Plus目錄來存放插件。
在程序中通過遍歷該文件夾中的所有DLL檢測(cè)符合預(yù)定接口的插件來實(shí)現(xiàn)動(dòng)態(tài)裝載相應(yīng)的功能模塊!
下面舉例:
一、定義接口
新建解決方案用于生成此接口
2 Public Interface IPlugin
3 Property MovementID() As Integer
4 Property MovementName() As String
5 Property ReTryMinute() As Integer
6 Property ConnectionString() As String
7 Event RaiseLog(ByVal log As String)
8 Sub Init()
9 End Interface
10 End Class
11
二、編寫繼承自該接口的自定義組件(將編譯成DLL)
該操作您需要新建一個(gè)解決方案
Imports System.Data2
Imports System.Data.SqlClient3
Imports System.Net4
Imports System.IO5
Imports na7Interface.IPlugin6

7

Public Class recvClass recv8

9
Implements IPlugin '實(shí)現(xiàn)此接口10

11
'構(gòu)造屬性變量12
Private _MovementID As Integer = 2713
Private _MovementName As String = "51麥克瘋"14
Private _SpanMinute As Integer = 3015
Private _ConnectionString As String = ""16

17
Private Fir As String = "活動(dòng):" + MovementName + "(" + MovementID.ToString + ")"18

19

/**/''' <summary>20
''' 返回內(nèi)部處理的消息,實(shí)現(xiàn)接口中的RaiseLog事件。21
''' </summary>22
''' <param name="logText"></param>23
''' <remarks></remarks>24
Public Event RaiseMyEvent(ByVal logText As String) Implements IPlugin.RaiseLog25

26

/**/''' <summary>27
''' 調(diào)用此方法!28
''' </summary>29
''' <remarks></remarks>30

Public Sub Init()Sub Init() Implements IPlugin.Init '繼承自接口的Init方法。31
'這里放置數(shù)據(jù)抓取及相關(guān)的處理程序。32
'實(shí)際應(yīng)用中要根據(jù)您的程序何時(shí)調(diào)用Init決定,這不是必須的方法33
ResultText("處理完成!")34
End Sub35

36

Private Sub SaveSetups()Sub SaveSetups(ByVal savedate As String, ByVal UserID As String, ByVal WebId As String, ByVal Setups As String)37
'定義該內(nèi)部方法,這個(gè)方法不實(shí)現(xiàn)任何接口中的方法。因此只在本類內(nèi)部實(shí)現(xiàn)。38
Dim CmdText As String = ""39
End Sub40

41

/**/''' <summary>42
''' 返回八位數(shù)字的日期格式43
''' </summary>44
''' <param name="dt"></param>45
''' <returns></returns>46
''' <remarks></remarks>47

Private Function ClongDate()Function ClongDate(ByVal dt As Date) As String '同上48
Dim mm As String = dt.Month.ToString49
If mm.Length = 1 Then mm = "0" + mm50
Dim dd As String = dt.Day.ToString51
If dd.Length = 1 Then dd = "0" + dd52
Return dt.Year.ToString + "" + mm + dd53
End Function54

55

Private Function ConvDate()Function ConvDate(ByVal dt As Long) As String '同上56
Dim YY As String = Mid(dt.ToString, 1, 4)57
Dim MM As String = Mid(dt.ToString, 5, 2)58
Dim DD As String = Mid(dt.ToString, 7, 2)59
Return YY + "-" + MM + "-" + DD + " 00:00:00"60
End Function61

62

/**/''' <summary>63
''' 獲得此組件處理的活動(dòng)ID,該屬性實(shí)現(xiàn)了接口IPlugin的MovementID屬性。64
''' </summary>65
''' <value></value>66
''' <returns></returns>67
''' <remarks></remarks>68

Public Property MovementID()Property MovementID() As Integer Implements IPlugin.MovementID69
Get70
Return _MovementID71
End Get72
Set(ByVal value As Integer)73
_MovementID = value74
End Set75
End Property76

77

/**/''' <summary>78
''' 獲得此組件的活動(dòng)名稱,同上79
''' </summary>80
''' <value></value>81
''' <returns></returns>82
''' <remarks></remarks>83

Public Property MovementName()Property MovementName() As String Implements IPlugin.MovementName84
Get85
Return _MovementName86
End Get87
Set(ByVal value As String)88
_MovementName = value89
End Set90
End Property91

92

/**/''' <summary>93
''' 獲得此組件定時(shí)調(diào)用的間隔分鐘數(shù),實(shí)現(xiàn)自定義屬生ReTryMinute94
''' </summary>95
''' <value></value>96
''' <returns></returns>97
''' <remarks></remarks>98

Public Property SpanMinute()Property SpanMinute() As Integer Implements IPlugin.ReTryMinute99
Get100
Return _SpanMinute101
End Get102
Set(ByVal value As Integer)103
_SpanMinute = value104
End Set105
End Property106

107

Public Property ConnectionString()Property ConnectionString() As String Implements IPlugin.ConnectionString108
Get109
Return _ConnectionString110
End Get111
Set(ByVal value As String)112
_ConnectionString = value113
End Set114
End Property115

116

Public Sub ResultText()Sub ResultText(ByVal txt As String)117
'響應(yīng)事件118
RaiseEvent RaiseMyEvent(txt)119
End Sub120
End Class121

三、在程序中調(diào)用定義的接口
注意:程序中定義接口編譯生成的DLL必須使用同一個(gè),否則如果不是使用相同的DLL,即使DLL的內(nèi)容相同,同樣也會(huì)產(chǎn)生錯(cuò)誤。
分享:如何創(chuàng)建安全的Web應(yīng)用程序把一個(gè)問題說清楚,是要有前提的,也要大家有一些通過的詞匯,就像大家談OO,就知道談的面向?qū)ο�,以及面向�(qū)ο蟮囊恍┨卣?懂設(shè)計(jì)模式的,一聽到
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 一個(gè)無刷新效果定時(shí)自動(dòng)更新頁(yè)面的例子
- 解析.Net編程接口剖析系列之比較和排序
- AJAX實(shí)現(xiàn)web頁(yè)面中級(jí)聯(lián)菜單的設(shè)計(jì)
- ASP.NET中實(shí)現(xiàn)模板頁(yè)
- 解析ASP.NET 2.0創(chuàng)建母版頁(yè)引來的麻煩
- 基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解
- 簡(jiǎn)述c#中對(duì)字符串進(jìn)行分割的幾種方法
- 解析linq to xml操作XML的示例分析
- ASP.NET26個(gè)常用性能優(yōu)化方
- ASP.NET 2.0實(shí)現(xiàn)防止同一用戶同時(shí)登陸
- 相關(guān)鏈接:
- 教程說明:
.Net教程-解讀.Net實(shí)現(xiàn)程序的插件機(jī)制
。