C#: Wie kann ich dynamisch laden/instanziieren eine DLL?

Ich habe gesehen, ein paar Beispiele gibt, dass könnte eventuell helfen mir, aber ich habe nicht viel Zeit, Sie zu entdecken, wie ich gerade herausgefunden heute, dass meine Chefs haben für diese demo eine Woche früher als geplant, möchte ich hinzufügen, dass diese neue Funktionalität. Ich werde versuchen, und halten Sie diese kurz und süß.

Ok, das ist wie mein 10 mal versucht, dies richtig klar zu machen, hoffentlich ist es. Dies ist eine Anwendung. Datenzeilen angezeigt werden müssen in einem DataGridView (fertig). Einige Zeilen werden unterschiedlich dargestellt anhand der Berichte (gemacht). Die meisten Berichte haben Ihre eigenen SQL-Datei und implementiert werden zur Laufzeit aus einer INI-Datei (fertig). Aber, einige Berichte nennen eine Funktion. Die Anwendung verwendet eine SQLite-Datenbank. Ich möchte DLLs, die Berichte, die alle das gleiche format, und alle von Ihnen gibt eine Liste von ReportRecord. ReportRecord ist eine Klasse definiert, die in meinem Haupt-Anwendung würde ich aber auch definieren, die es in jeder DLL, wenn Sie erstellt werden. Ich will erstellen der DLL, nennen es "GetRecords" - Funktion, und verwenden Sie es in meine Haupt-Anwendung. Hier einige psuedocode. Wenn Euch kann mir sagen, ob es möglich ist, oder geben Sie mir eine Idee für einen besseren Weg, dies zu tun, ich würde es zu schätzen wissen.

PSUEDOCODE

 foreach (string str in System.IO.Directory.GetFiles("C:\\ReportDlls", "*.dll"))
 {
   //Instantiate DLL e.g. newReport
   //_lstReportRecords.AddRange(newReport.GetReportRecords());
 }    

Gibt es trotzdem, dies zu tun?

Heute habe ich das folgende zu ergänzen, bis ich dies herausfinden:

        private void RefreshReports(string strReportTitle)
        {
            _lstReportRecords = _lstReportRecords.Where(rr => rr.Description != strReportTitle).ToList<ReportRecord>();
            string strColumn = iniFile.GetString(strReportTitle, "Column", "");


            if (strColumn != null)
            {
                _lstReportRecords.AddRange(_dataController.BuildReportList(strColumn, strReportTitle, GetReportSQL(strReportTitle)));
            }
            else
            {
                switch (strReportTitle)
                {
                    case "Improper Indenture":
                        _lstReportRecords.AddRange(_dataController.ImproperIndenture());
                        break;
                    case "Skipping Figure":
                        _lstReportRecords.AddRange(_dataController.SkippingFigure());
                        break;
                    default: break;
                }
            }
            FormatCells();
        }

Danke an alle.

Bearbeiten: tut mir Leid Jungs, schaut auf das Zeug ist ehrlich gesagt macht mich fühle mich dumm. Wie, mein Geist geht leer und alle und kann nicht konzentrieren sich auf es. 🙂 Was Euch zur Verfügung gestellt haben, ist wahrscheinlich der beste Weg, aber da habe ich eine Qualität Demo fertig, bis Dienstag, und es sollte nicht mehr Berichte Hinzugefügt, die benötigen Funktionen, bis dann, ich werde halten Sie diese öffnen. Einmal mein Chef ist aus der Stadt, um die demo, werde ich die Arbeit an der Umsetzung dieser haben. Aber jetzt, es wird unbeantwortet bleiben, es sei denn, ich ein Beispiel sehen, dass sehr, sehr (für 2 jährige) straight forward.

  • Ich bitte Euch, bitte bewahren Sie diese öffnen, zumindest bis zu diesem Wochenende, wenn ich Zeit haben, gehen über diese. Ich möchte halten Sie die links-und die Leute, die mich darüber informiert, Sie können mir weiter helfen. Bitte, bitte, bitte.
Schreibe einen Kommentar