سؤال

أحاول وضع نظام إضافي مع .NET، وأنا لست متأكدا مما إذا كنت أفعل ذلك بشكل صحيح. أساس النظام هو أن دليل معين ({{{{{{{{{{} {{{{{}} (يتم تعريف هذا في DLL آخر، لكنني سأذهب إلى ذلك لاحقا)، ثم قم بإنشاء مثيل لها واستدعاء وظيفة محددة في الحالة المذكورة.

Public Sub ScanPluginsInDirectory(ByVal Directory As String)

    Dim Plugins As New IO.DirectoryInfo(Directory)
    Dim Files As IO.FileInfo() = Plugins.GetFiles("*.dll")
    Dim CryptType As Type = GetType(CryptPluginBase)
    Dim PluginsData as List(Of LoadedPluginsInfo)

    For Each DllFile As IO.FileInfo In Files
        Try
            Dim thisAsm As Assembly = Assembly.LoadFrom(DllFile.FullName)
            Dim ClassDefs = thisAsm.GetTypes().Where(Function(type) CryptType.IsAssignableFrom(type))

            For Each ClassDef As Type In ClassDefs
                Dim A As Object
                A = ClassDef.Assembly.CreateInstance(ClassDef.Name)
                PluginsData.Add(New LoadedPluginsInfo(A.Plugin(), False))
            Next
        Catch ex As Exception
            Continue For
        End Try
    Next
End Sub

المشكلة المحددة لدي هي، لست متأكدا من أن هذه هي الطريقة الصحيحة للقيام بذلك. سوف الطريقة التي أحاول القيام بها، إذا كان يمكن افتراض ذلك A.Plugin() في الواقع موجود وأي هياكل ودروس المشار إليها هنا خالية من الأخطاء؟ إذا احتاج أي شخص إلى مزيد من التعليمات البرمجية للمساعدة، يمكنني نشره.

هل كانت مفيدة؟

المحلول

وعموما يجب أن تعمل الاستراتيجية. سيتم تحميل المكالمات الجمعية. تحميل الجمعية المستهدفة في العملية. من هناك، من الممكن إجراء فحص الكتابة وإنشاء مثيلات لهذه الأنواع.

أعتقد أن الطريقة الأسهل والأكثر موثوقية لإنشاء المثيل هي استخدام طريقة Activator.CreateInstance.

For Each def As Type in ClassDefs
  Dim inst = Activator.CreateInstance(def)
  PluginsData.Add(new LoadedPluginsInfo(inst.Plugin(), False))
Next

اعتمادا على أهدافك، سيكون اقتراح آخر هو نقل كتلة TRY / CATCK إلى الحلقة بدلا من ذلك. إن وجود كتلة TRY / CATCK على الجزء الخارجي من الحلقة يعني أنه إذا كان لدى أي نوع معين في التجميع خطأ، فستجاهل جميع الأنواع من تلك الجمعية. سيسمح لك تحريكها بداخلها بتجاهل الأنواع التي لا تعمل فقط كما تتوقع. هل قد يكون السلوك الحالي نيتك.

نصائح أخرى

هذا يجب أن يعمل، لقد كنت أستخدم هذا النوع من الأشياء في بعض المشاريع من قبل. لقد بحثت على وجه التحديد عن منشئ وتسابقها ولكن بصرف النظر عن ذلك كانت نفس الفكرة.

ولكن قد ترغب في النظر في مهد, ، الذي يعتني بالكثير من الأشياء بالنسبة لك للحصول على بنية مسافة البرنامج المساعد (إذا كنت على استعداد للانتظار قليلا لإصدار الإصدار، فهذا لا يزال CTP الآن).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top