我想創建一個WPF應用程序,該應用程序將成爲其他應用程序的中心點。主應用程序應該能夠根據用戶需求動態加載其他應用程序。經過一些研究,MEF似乎可能是解決這個問題的方法。使用WPF應用程序使用MEF運行多個不同的應用程序
我對MEF很新,所以我寫了一個測試應用程序,並試圖讓MEF工作。測試應用程序定義了一個非常基本的ITool界面。我能夠毫無困難地從類庫中導入多個類,但是我無法導入另一個WPF應用程序。 MEF有可能嗎?
我的主要WPF應用程序創建一個ToolContainer的實例,它創建和組成零件。
class ToolContainer
{
[ImportMany(typeof(ITool))]
IEnumerable<Lazy<ITool>> _tools;
private CompositionContainer _container;
public ToolContainer()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(
"C:\\Application Development\\Tool Center\\Tool Extensions"));
_container = new CompositionContainer(catalog);
try
{
_container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
//TODO: show error dialog
}
}
}
這裏是我創建了從itool用於繼承和出口的作品就好了多種類型的接口
public interface ITool
{
String ToolName { get; }
void OpenTool();
}
。一個例子就是在這裏。
[Export(typeof(ITool))]
public class Class1 : ITool
{
public String ToolName
{
get { return "....."; }
}
public void OpenTool()
{
//open the tool
}
}
現在我想導入繼承ITool接口的整個WPF應用程序。這裏的想法是,外部用戶可以創建自己的WPF應用程序,這些應用程序可以從主WPF應用程序運行。在未來,ITool界面將更加先進,但我正試圖讓基礎知識完成。我創建了一個新的測試WPF項目和修改App.xaml.cs是以下幾點:
[Export(typeof(ITool))]
public partial class App : Application, ITool
{
public String ToolName
{
get { return "Tool Sample"; }
}
public void OpenTool()
{
//open the tool
}
}
當我這樣做_tools不包含我的新WPF應用程序,但包含的Class1。任何想法我做錯了什麼?有更好的方法嗎?任何幫助將不勝感激。
感謝您的回覆。 – webe0316 2011-02-01 19:05:27