webForumDet fria alternativet

Fundering ang min Web Service

.NET

16 svar · 645 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Min lilla Web Servise börja att bli riktigt bra nu tack vare er fina hjälp.
Jag har en undran, nu etablera jag mi nWeb Service så här:

private localhost.WebService service = new SAW_Registret.localhost.WebService();

Detta är som ni ser den lokala varianten, men min fundering är, jag har lagt denna i varje formulär jag har (7 st) går det inte att göra detta globalt i stället? :stud

Medlem sedan okt. 200850 inlägg
#2

public static ;)

Jag skulle nog skapat en factory istället för köra med singelton och låta min factory hantera singelton åt mig. Så varje gång du ska använda din Service så går du mot en factory som get dig instansen till proxy klassen.

Medlem sedan mars 20011 880 inlägg
#3

Nu bidde det här rena grekiskan, har du lust att förklara eller något exempel?

Medlem sedan okt. 200850 inlägg
#4

saw skrev:

Nu bidde det här rena grekiskan, har du lust att förklara eller något exempel?

En factory kan texc vara en metod som skapar ett objekt åt dig tex:

public ICustomer CreateCustomer()
...
return new Customer();

var customer = CreateCustomer()

Det finns många ramverk så som Unity från Microsoft PAG och Spring.Net som kan användas som factory och skapa objekt åt dig. Du kan via dessa anger om du ska bara ha en instans av ditt objekt och inte ett nytt varje gång du vill skapa ett objekt. Singelton är ett design pattern som används för att se till så vi har bara en instance av ett objekt, och det är det du är ute efter med din Proxy klass, enligt din fråga, eller?

Medlem sedan mars 20011 880 inlägg
#5

fredrikn det här kan du märker jag, jag surfade omkring för att få lite kött på benen,
men jag måste erkänna att jag förstår ingenting. Det finns inget enklare sätt?

Medlem sedan okt. 200850 inlägg
#6

saw skrev:

fredrikn det här kan du märker jag, jag surfade omkring för att få lite kött på benen,
men jag måste erkänna att jag förstår ingenting. Det finns inget enklare sätt?

Jag vill inte ta några ansvar för detta, du får ta det ;) Men här är ett exempel för att göra det mycket enklare för dig:

private static readonly localhost.WebService _service = new SAW_Registret.localhost.WebService();

public static class ServiceFactory
...

public static GetSAW_Registret()
...
return _service;

Nu kommer du bara ha en instans av service.. eftersom vi använder oss av static, om du lägger till readonly så kommer du inte kunna tilldela värde till _service vid senare tillfälle. Lägg denna kod i en klass, sedan anropar du metoden varje gång du vill anropa din Service:

minService = ServiceFactory.GetSAW_Registret();

Jag valde en metod här för att inte exponera variablen _service publikt. Sorry för ful kod, men jag sitter på en MacBook och får inte till måsvingar just nu ;)

Medlem sedan mars 20011 880 inlägg
#7

Tack men som du förstår så kom jag i kläm med en gång.

public static GetSAW_Registret()
        {
            return _service;

        }

Error: Måste ha en return-type.. inte string eller?
Sen blev jag konfunderad av var jag skall lägga denna koden.
Skall jag ha en ny Class-fil?

Jag la det så här, är det rätt?

public static class ServiceFactory
    {
        private static readonly localhost.WebService _service = new SAW_Registret.localhost.WebService();
        public static GetSAW_Registret()
        {
            return _service;

        }
    }
Medlem sedan jan. 20023 327 inlägg
#8

Ja, jag tycker du ska skapa en egen klass för din factory och metodsignaturen bör vara följande:

public static localhost.WebService GetSAW_Registret()

Medlem sedan mars 20011 880 inlägg
#9

Då är det dax för nästa problem

 minService = ServiceFactory.GetSAW_Registret();
//Error:
The name 'minService' does not exist in the current context

Det var väll så jag blev rekommenderad???

Vad jag menar är, om jag gör så här

private localhost.WebService minService = ServiceFactory.GetSAW_Registret();

Då har jag inga error, men då är jag tillbaka till utgångspunkten.
Det jag var intresserad av var om jag bara kunde ändra på ett ställe istället
för 7 när jag går över till skarpt läge.

Medlem sedan jan. 20023 327 inlägg
#10
localhost.WebService minService = ServiceFactory.GetSAW_Registret();
Medlem sedan mars 20011 880 inlägg
#11

Compusa se mitt editerade innlägg.

Medlem sedan okt. 200850 inlägg
#12

Sorry, glömde ange return typ på metoden ;)

Vad menar du att ändra på flera ställen? För om du går mot en factory så är det den som skapar din instans av servicen. Men du kommer ha ett beroende av servicens typ. Detta kan du lösa genom att använda interface istället för en typ.

Medlem sedan mars 20011 880 inlägg
#13

Jo vad jag tänkte är att om jag har

private localhost.WebService minService = ServiceFactory.GetSAW_Registret();

..i början av varje formulär, vad händer när jag i classen ändrar..

private static readonly localhost.WebService _service = new SAW_Registret.localhost.WebService();
//till
private static readonly minServer.WebService _service = new SAW_Registret.minServer.WebService();

..räcker det att jag ändrar i classen, eller måste det ändras överallt???
(om jag förstod dig rätt så är det så).
Men du kommer ha ett beroende av servicens typ. Detta kan du lösa genom att använda interface istället för en typ.
Hur menar du med det?

Medlem sedan okt. 200850 inlägg
#14

Det är du som sätter namespacet som skapas när du lägger till din Web Reference, så varför inte sätt samma namn på din Web Reference till minServer istället för localhost? För du vet väl om att du kan i fönstret där du lägger till din reference, har en textbox där du anger namnet på din Web Reference? :P

Om du har en typ tex Customer, så är du bunden till den typen om du skriver:

Customer customer = CustomerFactory.CreateCustomer();

men om du använder dig av ett interface som Customer implementerar, tex ICustomer så kan du skriva:

ICustomer customer = CustomerFactory.CreateCustomer();

Då kan din CreateCustomer returnera vad som, bara de objekten implementerar interfacet ICustomer.

Medlem sedan mars 20011 880 inlägg
#15

Ok, då skall jag försöka, än en gång ett strort tack till dig Compusa.

Medlem sedan mars 20011 880 inlägg
#16

Naturligtvis så springer jag in i vägen..

public static class ServiceFactory
        {
            private static readonly minService _service = new SAW_Registret.minService();
            public static minService GetSAW_Registret()
            {
                return _service;
            }
        }

.. och för felet

'SAW_Registret.minService' is a 'namespace' but is used like a 'type'
Jag hittar ingen som helst hjälp på nätet, vad tror ni?

Medlem sedan mars 20011 880 inlägg
#17

Efter mycket om och men så tror jag att jag har lyckats

public static class ServiceFactory
        {
            private static readonly SAW_Registret.minService.WebService  _service = new SAW_Registret.minService.WebService();
            public static SAW_Registret.minService.WebService GetSAW_Registret()
            {
                return _service;
            }
        }
//sen har jag lagt
private SAW_Registret.minService.WebService service = Class.ServiceFactory.GetSAW_Registret();
//för att dra igång allt.

..ser det rätt ut?
Jag har hitintills inte fått något error... §jr

281 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
149 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)