Jag följer 3 lagers principen. Tja du kan ju fånga eventet i ditt fasadlager och kasta vidare ett nytt som är definerat i ditt fasadlager. Du menar att du vill delegera en metod från ditt applager via Facade:en ut till vyn? Jag är alldeles för trött just nu för att kolla om det är detta jag söker :D Okej så man måste skapa samma event i både applikationslagret och i facaden?Event mellan olika lager
Jag har ett applkationslager som gör vissa updates i vyn, vyn ska allså lyssna på events som triggas från applikationslagret.
Men jag vill inte att vyn ska känna till applikatslagret, utan den ska bara känna till facadlagret
Går det att passa vidare event från facadelagret ner i applikationslagret?
Vad jag vill är Allså att i vyn ange
FacadeLayer.OnSomeKindOfUpdate += MyEventHandler(myMethod);
men i sjävla verket
är det Applicationlayer som triggar eventenSv: Event mellan olika lager
Sv: Event mellan olika lager
Typ så här?
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace eventtest
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Skapa en instans av facade:en
Facade f = new Facade();
//Lyssna på event
f.onStuffInAppHappened += new Facade.onStuffInAppHappenedEventHandler(f_onStuffInAppHappened);
//Ropa på en metod i facaden
f.DoStuff();
}
//Hantera eventet vi lyssnar på
static void f_onStuffInAppHappened(object sender, EventArgs e)
{
MessageBox.Show("Some stuff did happen in Facade");
}
}
public class Facade
{
private App myapp;
public Facade()
{
//I konstruktorn kan vi göra att vi lyssnar på event från vårt applager
myapp = new App();
myapp.onDoStuff += new App.onDoStuffEventHandler(myapp_onDoStuff);
}
public void DoStuff(){
//Ropa på dostuff i app-lagret
myapp.DoStuff();
}
void myapp_onDoStuff(object sender, EventArgs e)
{
if(this.onStuffInAppHappened != null){
this.onStuffInAppHappened(sender, e);
}
}
public delegate void onStuffInAppHappenedEventHandler(object sender, EventArgs e);
public event onStuffInAppHappenedEventHandler onStuffInAppHappened;
}
public class App
{
public void DoStuff(){
//Här gör vi nog en massa spännande saker innan vi går vidare....
//
//
//När vi är klara så....
//Raise:ar vi ett event till den som nu lyssnar om nån nu lyssnar...
if (this.onDoStuff != null)
{
//Här kan du istället skicka med en instans av eb egensnickrad eventargsklass
//Istället för en EventArgs.Empty
this.onDoStuff(this, EventArgs.Empty);
}
}
//Deklaration om hur vi vill att metoden som tar emot vårt event skall se ut
public delegate void onDoStuffEventHandler(object sender, EventArgs e);
//Talar om att vi skapar ett event med detta
//utseende som vi kan låta externa klasser lyssna på
public event onDoStuffEventHandler onDoStuff;
}
}
Sv:Event mellan olika lager
men tackar för att du lade ner sådan tid på ett svar, ska kolla in det efter middagen...Sv: Event mellan olika lager
Synd, men är det enda sättet så...