Oprettet man. d. 29. oktober 2012 kl. 18:09:04

CodingJoe
CodingJoe (2.650 point. Point ude: 500)

Problemer med min singleton

Så endelig efter at have lavet min singleton og finpudset den lidt, så rammer jeg en mur. Jeg havde regnet med, min singleton kunne holde på state på tværs af mine assemblies. Jeg har en applikation bestående af ca. 4 assemblies, og alle har referencer til den assembly, hvor min singleton befinder sig i. Dog ender jeg med at jeg ikke refererer til den samme instans, men at de 4 hver især laver deres egen instans af min singleton. Det var ikke planen :(

Tror min instans kun lever i den samme assembly, jeg har læst lidt på nettet og tilsyneladende skal jeg benytte mig af remoting. Dog er jeg bange for, at den vil volde mig problemer, da jeg sagtens kan have andre applikationer referere til min singleton assembly.

Hvad gør jeg her?

Jeg giver sprøde points til de(t) bedste svar :)

Skrevet man. d. 29. oktober 2012 kl. 18:19:25| #1

arne_v
arne_v (1.048.778 point)
Din singleton vil kun eksistere i en kopi per app domain, hvilket i de fleste tilfaelde er per process.

Forskellige assemblies i samme app domain skal bruge samme kopi.

Skrevet man. d. 29. oktober 2012 kl. 18:42:20| #2

CodingJoe
CodingJoe (2.650 point)
Det mente jeg også, men jeg skriver fx. navnet på den første assembly, der første gang benytter sig af min singleton, efterfølgende skriver jeg navnet ud i en log. Benytter jeg mig af min singleton i fx. en dataadgangs assembly og skriver navnet ud, så er det navnet på min dataadgangs assembly og ikke den første... :(

Skrevet man. d. 29. oktober 2012 kl. 18:47:04| #3

arne_v
arne_v (1.048.778 point)
Den forstod jeg ikke.

Kan du forklare lidt mere - gerne med et par kode fragmenter.

Skrevet man. d. 29. oktober 2012 kl. 19:26:10| #4

CodingJoe
CodingJoe (2.650 point)
I min Singleton nedarver jeg fra min klasse:

public sealed class MinSingleton : MinKlasse
{
        private static readonly object SyncRoot = new object();

        private static volatile MinSingleton instance;

        public static MinSingleton Instance
        {
            get
            {
                lock (SyncRoot)
                {
                    return instance ?? (instans = new MinSingleton());
                }
            }
        }
    }

------------------------------------

public abstract class MinKlasse {

public string Navn
{
    get
    {
      return Assembly.GetExecutingAssembly().GetName().Name;
    }
}
}

I min første logger gør jeg noget lignende:
MyLogger.Current.LogInfo(MinSingleton.Instans.Navn);

Et andet sted i en anden assembly gør jeg det samme:
MyLogger.Current.LogInfo(MinSingleton.Instans.Navn);

Har jeg misforstået noget? :(

Jeg får to forskellige navne. Jeg havde regnet med anden gang jeg loggede, ville navnet på den assembly fra første gang ville være bibeholdt.

Skrevet man. d. 29. oktober 2012 kl. 19:33:45| #5

arne_v
arne_v (1.048.778 point)
Hvis MinSingleton og MinKlasse er i X.dll og de to kald er i A.dll og B.dll, saa boer den udskriver X.dll begge gange!

Har du faaet MinSingleton og MinKlasse bygget ind i A.dll og B.dll?

Skrevet man. d. 29. oktober 2012 kl. 19:48:42| #6

CodingJoe
CodingJoe (2.650 point)
De er i X.dll

og min A.dll benytter min singleton første gang...

i min B.dll forventer jeg navnet på A.dll, men det er det ikke :(

Både A.dll og B.dll har en reference til X.dll.

Skrevet man. d. 29. oktober 2012 kl. 19:55:09| #7

arne_v
arne_v (1.048.778 point)
Hvis MinKlasse er i X.dll saa skal Navn returnere X.dll og hverken A.dll eller B.dll!

Skrevet man. d. 29. oktober 2012 kl. 20:00:59| #8

CodingJoe
CodingJoe (2.650 point)
Det gør den faktisk...my bad.

Det er faktisk også derfra jeg skriver ud i min log første gang...og i min (lad os bare kalde den) a.dll benytter jeg min singleton igen og får navnet på min x.dll

Skrevet man. d. 29. oktober 2012 kl. 20:01:48| #9

CodingJoe
CodingJoe (2.650 point)
Revidere:

Det gør den faktisk...my bad.

Det er faktisk også derfra jeg skriver ud i min log første gang...og i min (lad os bare kalde den) a.dll benytter jeg min singleton igen og får navnet på min A.DLL!

Det går lidt for hurtigt...med at skrive

Skrevet man. d. 29. oktober 2012 kl. 20:25:02| #10

CodingJoe
CodingJoe (2.650 point)
Hmmm tror jeg har gjort noget forkert...jeg finder lige ud af det...

Skrevet man. d. 29. oktober 2012 kl. 20:38:19| #11

CodingJoe
CodingJoe (2.650 point)
Nej, koden ser rigtig nok ud.

Skrevet man. d. 29. oktober 2012 kl. 20:47:47| #12

CodingJoe
CodingJoe (2.650 point)
Det virker faktisk fint...jeg får det rigtige navn.

Skrevet man. d. 29. oktober 2012 kl. 20:50:10| #13

CodingJoe
CodingJoe (2.650 point)
problemet ligger mellem:

Assembly.GetExecutingAssembly().GetName().Name;

og

Assembly.GetCallingAssembly().GetName().Name;

Skrevet man. d. 29. oktober 2012 kl. 20:53:04| #14

CodingJoe
CodingJoe (2.650 point)
og rækkefølgen mine unittests kører i...lol. Det er den første unittest, der faktisk bestemmer udfaldet af resten. He he he selvfølgelig...føler mig ret dum nu :S

The magic and curse of singleton!!!!

Skrevet fre. d. 11. januar 2013 kl. 23:16:11| #15

CodingJoe
CodingJoe (2.650 point)
Arne, jeg skylder dig point. Smid bare et svar ind.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

webcam code .aspx

Oprettet den 23. maj 2013 kl. 16.03
webhjaelp giver 60 point for svar | Giv et svar »

ASP.NET og traadning deri

Oprettet den 22. maj 2013 kl. 00.33
justincase1089 giver 60 point for svar | Giv et svar »

Undgå duplikeret kode i en asp.net web form applikation

Oprettet den 15. maj 2013 kl. 00.36
jan_h giver 100 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger