Współpraca aplikacji z biblioteką

0

Witam,

Piszę aplikację do odbioru pewnych pakietów danych z urządzenia. W aplikacji głównej odbieram z portu szeregowego cały wiersz danych i następnie chcę przesłać go do parsera. Chcę, aby parser znajdował się w osobnym pliku dll, gdyż w przyszłości chcę dodać obsługę innych urządzeń, w związku z czym będzie się to wiązało z dodaniem nowego pliku dll, w którym będzie zaszyty parser implementujący znany interfejs. W aplikacji głównej znajduje się statyczna klasa, która przechowuje już przetworzone aktualnie odczytane wartości różnego typu - enum, string, int, float itp. Gdyby implementacja nie znajdowała się w osobnej bibliotece klas, to zrobiłbym to tak:

         public void Read(string v)
        {
            if (v == "*E")
            {
                //tutaj chciałbym przypisać do klasy statycznej Klasa.Error = true
            }

            if (v == "212")
            {
                //tutaj chciałbym przypisać do klasy statycznej Klasa.Odczyt = 212
            }

            if (v == "tekst")
            {
                //tutaj chciałbym przypisać do klasy statycznej Klasa.Teskt = tekst
            }
        }

Niestety powyższe rozwiązanie nie zadziała, ponieważ nie mam tu dostępu do statycznej klasy Klasa, a referencję mogę dodać tylko w jedną stronę (bibliotekę do projektu bądź odwrotnie).

W jaki sposób rozwiązać ten problem? Czy są jakieś sprawdzone wzorce?

0

Przede wszystkim nie wiem czy klasa statyczna była by tu dobrym rozwiązaniem. I tak za każdym razem tworzysz nową jej instancje,więc najlepiej było by użyć akcesorów. Chyba, że chodzi ci koniecznie o static to daj znać.

Przykładowy kod:

using System;

namespace test
{
    class Program
    {
        

        static void Main(string[] args)
        {
            Test t1 = new Test();
            t1.Error = true;
            t1.Odczyt = 0xDEADC0DE;
            t1.Tekst = "Witam świecie!";
            Test t2 = new Test();
            t2.Error = false;
            t2.Odczyt = 0xDEADBEEF;
            t2.Tekst = "Hello World!";

            Console.Write("Z instancji t1: {0} 0x{1:X} {2} \n", t1.Error, t1.Odczyt, t1.Tekst);
            Console.Write("Z instancji t2: {0} 0x{1:X} {2} \n", t2.Error, t2.Odczyt, t2.Tekst);
            Console.ReadKey();
        }

    }
    
    class Test //klasa do której się odwołujesz
    {
        public bool Error { get; set; }
        public uint Odczyt { get; set; }
        public string Tekst { get; set; }
        // i tak dalej...
    }
}

 
0

event, delegat albo coś podobnego…

0

Muszę wiedzieć w aplikacji głównej co zostało ostatnio odebrane, gdzieś to przechowywać, dla tego stworzyłem repozytorium na ostatnio odczytane wartości na singletonie, dzięki czemu wszędzie mam dostęp do statycznych wartości. W sumie na podstawie rozwiązania camed_ jako wynik metody Read(string v) mógłbym zwracać obiekt z polami i sprawdzać które z pól nie jest nullem, ale może jest jakiś lepszy sposób?

1 użytkowników online, w tym zalogowanych: 0, gości: 1