저는 Silverlight 4 RC의 응용 프로그램에서 작업 중이며 플러그인 제어를 처리하기 위해 MEF를 배우기 위해 oppertunity를 사용하고 있습니다. 나는 꽤 기본적인 장원으로 일하고있다. 그러나 그것은 깔끔하지는 않다. 여러 xap을 가져 오는 더 좋은 방법이 있다는 것을 나는 안다.MEF + SL4 질문
기본적으로 내 호스트 응용 프로그램의 App.xaml에, 나는로드 다음 이야기 MEF있어 내 XAP의 :
AggregateCatalog catalog = new AggregateCatalog();
DeploymentCatalog c1 = new DeploymentCatalog(new Uri("TestPlugInA.xap", UriKind.Relative));
DeploymentCatalog c2 = new DeploymentCatalog(new Uri("TestPlugInB.xap", UriKind.Relative));
catalog.Catalogs.Add(c1);
catalog.Catalogs.Add(c2);
CompositionHost.Initialize(catalog);
c1.DownloadAsync();
c2.DownloadAsync();
내가 완전히 여기에 AggregateCatalog를 사용하지 않는 확신과 나는 디렉토리에있을 수있는 xap을로드 할 수 있어야합니다. 단지 Uri의 코드를 하드 코딩하는 것이 아닙니다 ....
또한, 호스트의 MainPage.xaml.cs에 다음과 같은 컬렉션이 있습니다. 플러그인의 내용은 다음과 같습니다.
[ImportMany(AllowRecomposition = true)]
public ObservableCollection<IPlugInApp> PlugIns { get; set; }
다시
이마지막으로, MainPage.xaml.cs를 파일 IPartImportsSatisfiedNotification를 구현하고 나는 플러그인의 한 번로드 처리하기 위해 다음과 같은 한 ....이 작동하지만, 내가 잘못 ImportMany을 사용하고 확신합니다 :
public void OnImportsSatisfied()
{
sp.Children.Clear();
foreach (IPlugInApp plugIn in PlugIns)
{
if (plugIn != null)
sp.Children.Add(plugIn.GetUserControl());
}
}
이 방법은 효과가 있지만, n 번 (n은 xap을로드하는 횟수)으로 실행됩니다. 다음과 같이 나는이 플러그인의 나의 스택 패널을로드 할 때 내가 채워집니다하지 않는 것처럼 sp.Children.Clear()를 호출 할 필요 해요 :
TestPlugIn TestPlugIn TestPlugIn B
나는 분명히 여기에 뭔가 빠져있다. 아무도 내가해야 할 일을 지적 할 수 있습니까? 감사합니다.
고마워, 그게 내가 함께 간 것과 내 요구에 맞는 것 같다. –