none
Silverlight에서 동적 어셈블리 로딩 RRS feed

답변

  • 안녕하십니까? 김도남 님

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “Silverlight에서 동적 어셈블리 로딩”에 대한 답변을 드리겠습니다.

     

     

    Step 1 : Assembly 작성

     

    Application56Contract

     

    IClass.CS

     

    로드해서 사용할 Class Interface를 정의합니다.

     

    public interface IClass1

    {        

        event EventHandler ButtonClick;

        StackPanel GetUI();       

     

    }

     

    SilverlightApplicationLibrary1

     

    로드해서 사용하는 Class를 정의 합니다.

     

    Class1.CS

     

    public class Class1 : IClass1

    {

        private TextBox _textBox;

        private Button _button;

        public event EventHandler ButtonClick;

     

     

        #region Cosntructor

        public Class1()

        {

            _textBox = new TextBox();

            _button = new Button();

        }

        #endregion Cosntructor

     

        public StackPanel GetUI()

        {           

            StackPanel sp = new StackPanel();

            

     

            _textBox.Text = "This is Class Libarary Instance.";

            _button.Content = "Click ME";

            _button.Click += _button_Click;

     

            sp.Orientation = Orientation.Vertical;

            sp.Children.Add(_textBox);

            sp.Children.Add(_button);

     

            return sp;

        }       

     

     

        void _button_Click(object sender, RoutedEventArgs e)

        {

            if (ButtonClick != null)

            {

                ButtonClick(thisnew EventArgs());

            }

        }

        

    }

     

     

     

     

    Step 2 : Assembly 로드

     

     

     

    아래와 같이 WebClient를 이용해서 ClientBin폴더에 있는DLL Stream을 로드합니다.

     

    SilverlightApplication56

     

    MainPage.XAML.CS

     

    WebClient client = new WebClient();

    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);

    client.OpenReadAsync(new Uri("SilverlightClassLibrary1.dll"UriKind.Relative));     

     

     

    로드한 Stream AssemblyPart Class 로드 함수로 Asembly Class 변환을 합니다.

     

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

    {

        AssemblyPart ap = new AssemblyPart();

        Assembly assembly = ap.Load(e.Result);    

    }

     

     

     

    Step 3 : Instance 생성

     

     

    로드한 Assembly를 이용해서 사용할 Class1의 인스턴를 생성을 합니다.

     

    SilverlightApplication56

     

    MainPage.XAML.CS

     

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

    {

        AssemblyPart ap = new AssemblyPart();

        Assembly assembly = ap.Load(e.Result);

     

        IClass1 class1 = assembly.CreateInstance("SilverlightClassLibrary1.Class1"as IClass1;

     

        class1.ButtonClick += new EventHandler(class1_ButtonClick);

     

        LayoutRoot.Children.Add(class1.GetUI());    

    }

     

     

    Project Explorer

     

     

    참고 자료

     

    AssemblyPart 클래스

    http://msdn.microsoft.com/ko-kr/library/system.windows.assemblypart(v=vs.95).aspx

     

    Assembly Class

    http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    • 답변으로 표시됨 김도남 2011년 11월 28일 월요일 오전 8:40
    2011년 11월 25일 금요일 오전 9:45
    중재자