Domanda

La mia app ha una classe singleton chiamata CycleManager. Ho creato una classe sigillata per questo scopo come questa

public sealed class CycleManager
{
    public static readonly CycleManager instance = new CycleManager();

    public CycleManager()
    {
        //ReadFromIsolatedStorage();
    }

    public static CycleManager Instance
    {
        get
        {
            return instance;
        }

    }
}

E App.xaml.cs ha il seguente codice

    public App()
    {
        UnhandledException += Application_UnhandledException;

        InitializeComponent();

        InitializePhoneApplication();

        RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);            if (System.Diagnostics.Debugger.IsAttached)
        {
            Application.Current.Host.Settings.EnableFrameRateCounter = true;

            PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
        }
    }

Ho usato rootFrame_navigating () per verificare se ho bisogno di andare alla pagina principale o alla pagina di accesso.

    void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        //throw new NotImplementedException();
        if (e.Uri.ToString().Contains("/RootPage.xaml") != true)
            return;

        CycleManager pCycMan = CycleManager.instance;

        e.Cancel = true;
        RootFrame.Dispatcher.BeginInvoke(delegate
        {
            if (pCycMan.GetPasswordEnabled())
                RootFrame.Navigate(new Uri("/PasswordPage.xaml", UriKind.Relative));
            else
                RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        });
    }

Mi aspettavo che l'istanza CycleManager fosse creata quando un'istanza viene chiamata all'interno di rootFrame_navigating ()

Ma il debug mi ha mostrato che JUS dopo il componente di app (), il flusso di controllo si sposta sulla classe del gestore del ciclo e dopo il costruttore CycleManager () si sposta su rootFrame_navigating. !! C'è qualcosa che non va o l'ho capito sbagliato?

La seconda cosa è che all'esecuzione di CycleManager pCycMan = CycleManager.instance; Mi aspettavo che il seguente codice nel ciclomanager fosse chiamato, ma sorprendentemente non lo è. Allora come è gestita la proprietà Singleton? O ogni volta che viene creato un nuovo OBJ?

    public static CycleManager Instance
    {
        get
        {
            return instance;
        }

    }

Alfah

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top