none
[Silverlight Tips] 동적으로 DLL 로드 RRS feed

  • 일반 토론

  • 질문

     

    Silverlight에서 동적으로 DLL을 로드할 수 있습니다.

     

    답변

     

    Silverlight에서 동적으로 임의의 DLL을 로드한 후 사용을 할 수 있습니다. 모든 라이브러리를 XAP에 포함하지 않고 필요할 경우에 서버에서 다운로드 합니다. 이와 같은 경우 사용자에게 빠른 첫 페이지 로딩 경험을 제공할 수 있습니다.

     

    Setp 1 : DLL 준비

    임의로 Silverlight Library를 생성,  UserControl을 생성 합니다.

    Assembly Name : SilverlightClassLibrary1

    UC01.XAML

    <Grid x:Name="LayoutRoot" Background="White">

        <TextBlock Text="UserControl1"

                   HorizontalAlignment="Center"

                   VerticalAlignment="Center"

                   FontSize="22"/>

    </Grid>

     

    Step 2 : DLL 다운

    WebClient Class를 이용해서 서버에서 DLL을 다운로드할 수 있습니다.

    WebClient webClient = new WebClient();

    string path = "http://localhost:61469/SilverlightClassLibrary1.dll";

    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);

    webClient.OpenReadAsync(new Uri(path, UriKind.Absolute));

     

    Step 3 : Instance 생성

    다운로드한  DLL에서 UC01 인스턴스를 생성합니다.

    AssemblyPart aPart = new AssemblyPart();

    _assembly = aPart.Load(e.Result);

    UserControl uControl = _assembly.CreateInstance("SilverlightClassLibrary1.UC01"as UserControl;

     

    Step 4 : XAML Control추가

    XAML에 생성한 Instance를 추가를 합니다.

    LayoutRoot.Children.Add(uControl);

     

     

    Step 5 : Policy 파일

    보안 문제로 ClientAccessPolicy.xml에 파일을 설정을 해야 합니다.

     

    <?xml version="1.0" encoding="utf-8"?>

    <access-policy>

      <cross-domain-access>

        <policy>

          <allow-from http-request-headers= "*">

            <domain uri="*"/>

          </allow-from>

          <grant-to>

            <resource path="/" include-subpaths="true"/>

          </grant-to>

        </policy>

      </cross-domain-access>

    </access-policy>

     

    Project Explorer

     

     

    참고 자료

    WebClient Class
    http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.NET.WEBCLIENT);k(TargetFrameworkMoniker-%22SILVERLIGHT%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

    AssemblyPart Class
    http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.WINDOWS.ASSEMBLYPART);k(TargetFrameworkMoniker-%22SILVERLIGHT%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

    2011년 10월 24일 월요일 오전 8:47
    중재자