silverlightsilverlight-4.0silverlight-3.0silverlight-2.0

How can I write (Application.Current as App) in my Silverlight class library?


I have few public properties in App.xaml.cs which is in project A and I want to refer them in my project B. However my project A has a reference to project B, so I cannot add again the reference of project A in project B otherwise it will result in cyclic error. So how can I refer those properties in my class library? I don't want to use reflection.

As a workaround I have stored those properties in one class in project B (so it can be referred in project A as well as project B) and made those properties to be static and all works fine. However I am still curious to know what if I had stored them in App.xaml.cs? Are there any options available?


Solution

  • The App class should expose things that are only relevant to the application project. As soon as you realised that you wanted these things accessable in B.dll they became relevant to more than just the application project and therefore no longer belong in the application project.

    Adding a class to B.dll that carries these things as static properties could be a reasonable approach. Another common pattern is to have a single Current static property.

    public MyClass
    {
        private static MyClass _current = new MyClass();
        public static MyClass Current { get { return _current; } }
    
        public string SomeInstanceValue { get; set; }
    }
    

    Both A and B would access things using the pattern var x = MyClass.Current.SomeInstanceValue. The advantage of this approach is that it allows the Current property getter to determine if a "current" instance is available or not.

    You might also want to review the documentation on ApplicationLifeTimeObjects.