本文整理汇总了C#中System.ComponentModel.Composition.Hosting.CompositionContainer.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# CompositionContainer.Dispose方法的具体用法?C# CompositionContainer.Dispose怎么用?C# CompositionContainer.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.ComponentModel.Composition.Hosting.CompositionContainer
的用法示例。
在下文中一共展示了CompositionContainer.Dispose方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Execute
public void Execute()
{
//
// カタログ構築.
// AggregateCatalogは、複数のCatalogを一つにまとめる役割を持つ。
//
var catalog = new AggregateCatalog();
// AssemblyCatalogを利用して、自分自身のアセンブリをカタログに追加.
catalog.Catalogs.Add(new AssemblyCatalog(typeof(MEFSamples01).Assembly));
//
// コンテナを構築.
//
_container = new CompositionContainer(catalog);
try
{
// 合成実行.
_container.ComposeParts(this);
// 実行.
Output.WriteLine(_exporter.Name);
}
catch (CompositionException ex)
{
// 合成に失敗した場合.
Output.WriteLine(ex.ToString());
}
if (_container != null)
{
_container.Dispose();
}
}
示例2: Main
static void Main()
{
// important to call these before creating application host
Application.EnableVisualStyles();
Application.DoEvents(); // see http://www.codeproject.com/buglist/EnableVisualStylesBug.asp?df=100&forumid=25268&exp=0&select=984714
// Set up localization support early on, so that user-readable strings will be localized
// during the initialization phase below. Use XML files that are embedded resources.
Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CurrentCulture;
Localizer.SetStringLocalizer(new EmbeddedResourceStringLocalizer());
// Create a catalog with all the components that make up the application, except for
// our MainForm.
var catalog = new TypeCatalog(
typeof(SettingsService), // persistent settings and user preferences dialog
typeof(CommandService), // handles commands in menus and toolbars
typeof(AtfUsageLogger), // logs computer info to an ATF server
typeof(CrashLogger), // logs unhandled exceptions to an ATF server
typeof(UnhandledExceptionService), // catches unhandled exceptions, displays info, and gives user a chance to save
typeof(StandardFileExitCommand), // standard File exit menu command
typeof(HelpAboutCommand), // Help -> About command
typeof(FolderViewer), // manages TreeControl to display folder hierarchy
typeof(FileViewer), // managed ListView to display last selected folder contents
typeof(NameDataExtension), // extension to display file name
typeof(SizeDataExtension), // extension to display file size
typeof(CreationTimeDataExtension), // extension to display file creation time
typeof(UserFeedbackService), // component to send feedback form to SHIP
typeof(VersionUpdateService), // component to update to latest version on SHIP
typeof(PythonService), // scripting service for automated tests
typeof(ScriptConsole), // provides a dockable command console for entering Python commands
typeof(AtfScriptVariables), // exposes common ATF services as script variables
typeof(AutomationService) // provides facilities to run an automated script using the .NET remoting service
);
var container = new CompositionContainer(catalog);
// manually add the MainForm
var batch = new CompositionBatch();
var mainForm = new MainForm
{
Icon = GdiUtil.CreateIcon(ResourceUtil.GetImage(Sce.Atf.Resources.AtfIconImage))
};
// our custom main Form with SplitContainer
batch.AddPart(mainForm);
batch.AddPart(new WebHelpCommands("https://github.com/SonyWWS/ATF/wiki/ATF-File-Explorer-Sample".Localize()));
container.Compose(batch);
// initialize all components which require it
container.InitializeAll();
Application.Run(mainForm);
container.Dispose();
}
示例3: PartAddedViaAddExportedValue_ShouldNotBeDisposedWithContainer
public void PartAddedViaAddExportedValue_ShouldNotBeDisposedWithContainer()
{
var container = new CompositionContainer();
var disposablePart = new AnyPartDisposable();
var batch = new CompositionBatch();
batch.AddPart(batch);
container.Compose(batch);
container.Dispose();
Assert.IsFalse(disposablePart.IsDisposed);
}
示例4: Main
static void Main(string[] args)
{
var catalog = new AssemblyCatalog(typeof(Program).Assembly);
var container = new CompositionContainer(catalog);
for (int i = 0; i < 3; i++)
container.GetExportedValue<NonSharedPlugin>().Run();
for (int i = 0; i < 3; i++)
container.GetExportedValue<SharedPlugin>().Run();
for (int i = 0; i < 3; i++)
container.GetExportedValue<AnyPlugin>().Run();
container.GetExportedValue<TesterAny>().Test();
container.GetExportedValue<TesterShared>().Test();
container.GetExportedValue<TesterNonShared>().Test();
container.Dispose();
}
示例5: CanBeCollectedAfterDispose
public void CanBeCollectedAfterDispose()
{
AggregateExportProvider exportProvider = new AggregateExportProvider();
var catalog = new AggregateCatalog(CatalogFactory.CreateDefaultAttributed());
var container = new CompositionContainer(catalog, exportProvider);
WeakReference weakContainer = new WeakReference(container);
container.Dispose();
container = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.IsFalse(weakContainer.IsAlive);
GC.KeepAlive(exportProvider);
GC.KeepAlive(catalog);
}
示例6: Initialize
/// <summary>
/// This method can be used to initialize the global container used by <see cref="CompositionInitializer.SatisfyImports(object)"/>
/// in case where the default container doesn't provide enough flexibility.
///
/// If this method is needed it should be called exactly once and as early as possible in the application host. It will need
/// to be called before the first call to <see cref="CompositionInitializer.SatisfyImports(object)"/>
/// </summary>
/// <param name="catalogs">
/// An array of <see cref="ComposablePartCatalog"/> that should be used to initialize the <see cref="CompositionContainer"/> with.
/// </param>
/// <exception cref="ArgumentNullException">
/// <paramref name="catalogs"/> is <see langword="null"/>.
/// </exception>
/// <exception cref="InvalidOperationException">
/// Either <see cref="Initialize(CompositionContainer)" /> or <see cref="Initialize(ComposablePartCatalog[])" />has already been called or someone has already made use of the global
/// container via <see cref="CompositionInitializer.SatisfyImports(object)"/>. In either case you need to ensure that it
/// is called only once and that it is called early in the application host startup code.
/// </exception>
public static CompositionContainer Initialize(params ComposablePartCatalog[] catalogs)
{
AggregateCatalog aggregateCatalog = new AggregateCatalog(catalogs);
CompositionContainer container = new CompositionContainer(aggregateCatalog);
try
{
CompositionHost.Initialize(container);
}
catch
{
container.Dispose();
// NOTE : this is important, as this prevents the disposal of the catalogs passed as input arguments
aggregateCatalog.Catalogs.Clear();
aggregateCatalog.Dispose();
throw;
}
return container;
}
示例7: Main
static void Main()
{
// important to call these before creating application host
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents(); // see http://www.codeproject.com/buglist/EnableVisualStylesBug.asp?df=100&forumid=25268&exp=0&select=984714
#if true
// Set up localization support early on, so that user-readable strings will be localized
// during the initialization phase below. Use XML files that are embedded resources.
Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CurrentCulture;
Localizer.SetStringLocalizer(new EmbeddedResourceStringLocalizer());
var catalog = new TypeCatalog(
typeof(SettingsService), // persistent settings and user preferences dialog
typeof(StatusService), // status bar at bottom of main Form
typeof(CommandService), // handles commands in menus and toolbars
typeof(ControlHostService), // docking control host
typeof(WindowLayoutService), // multiple window layout support
typeof(WindowLayoutServiceCommands), // window layout commands
typeof(FileDialogService), // standard Windows file dialogs
typeof(AutoDocumentService), // opens documents from last session, or creates a new document, on startup
typeof(Outputs), // service that provides static methods for writing to IOutputWriter objects.
typeof(OutputService), // rich text box for displaying error and warning messages. Implements IOutputWriter.
typeof(RecentDocumentCommands), // standard recent document commands in File menu
typeof(StandardFileCommands), // standard File menu commands for New, Open, Save, SaveAs, Close
typeof(StandardFileExitCommand), // standard File exit menu command
typeof(StandardEditCommands), // standard Edit menu commands for copy/paste
typeof(StandardEditHistoryCommands), // standard Edit menu commands for undo/redo
typeof(StandardSelectionCommands), // standard Edit menu selection commands
typeof(HelpAboutCommand), // Help -> About command
typeof(UnhandledExceptionService), // catches unhandled exceptions, displays info, and gives user a chance to save
typeof(ContextRegistry), // central context registry with change notification
typeof(DocumentRegistry), // central document registry with change notification
typeof(MainWindowTitleService), // tracks document changes and updates main form title
typeof(TabbedControlSelector), // enable ctrl-tab selection of documents and controls within the app
typeof(DefaultTabCommands), // provides the default commands related to document tab Controls
typeof(PropertyEditor), // property grid for editing selected objects
//typeof(GridPropertyEditor), // grid control for editing selected objects
typeof(PropertyEditingCommands), // commands for PropertyEditor and GridPropertyEditor, like Reset,
// Reset All, Copy Value, Paste Value, Copy All, Paste All
typeof(Editor), // code editor component
typeof(SchemaLoader), // loads schema and extends types
typeof(CharacterEditor),
typeof(CharacterSettingsCommands)
);
// Set up the MEF container with these components
var container = new CompositionContainer(catalog);
var toolStripContainer = new ToolStripContainer();
toolStripContainer.Dock = DockStyle.Fill;
var mainForm = new MainForm(toolStripContainer);
mainForm.Icon = GdiUtil.CreateIcon(ResourceUtil.GetImage(Sce.Atf.Resources.AtfIconImage));
mainForm.Text = "Butterfly Engine".Localize();
var batch = new CompositionBatch();
batch.AddPart(mainForm);
container.Compose(batch);
// To make the tab commands (e.g., "Copy Full Path", "Open Containing Folder") available, we have to change
// the default behavior to work with this sample app's unusual Editor. In most cases, an editor like this
// would implement IDocumentClient and this customization of DefaultTabCommands wouldn't be necessary.
var tabCommands = container.GetExportedValue<DefaultTabCommands>();
tabCommands.IsDocumentControl = controlInfo => controlInfo.Client is Editor;
// Initialize components that require it. Initialization often can't be done in the constructor,
// or even after imports have been satisfied by MEF, since we allow circular dependencies between
// components, via the System.Lazy class. IInitializable allows components to defer some operations
// until all MEF composition has been completed.
container.InitializeAll();
// Show the main form and start message handling. The main Form Load event provides a final chance
// for components to perform initialization and configuration.
Application.Run(mainForm);
// Give components a chance to clean up.
container.Dispose();
#else
var mainForm = new FormTest
{
Icon = GdiUtil.CreateIcon(ResourceUtil.GetImage(Sce.Atf.Resources.AtfIconImage))
};
Application.Run(mainForm);
#endif
}
示例8: DisposeContainerDisposesTransientParsley
public void DisposeContainerDisposesTransientParsley()
{
var catalog = new TypeCatalog(typeof(Ploeh.Samples.Menu.Mef.Attributed.Lifetime.NonShared.Parsley));
var container = new CompositionContainer(catalog);
var ingredient = container.GetExportedValue<IIngredient>();
container.Dispose();
var parsley = Assert.IsAssignableFrom<Parsley>(ingredient);
Assert.True(parsley.IsDisposed);
}
示例9: Main
public static void Main(string[] args)
{
// It's important to call these before starting the app; otherwise theming and bitmaps
// may not render correctly.
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents(); // see http://www.codeproject.com/buglist/EnableVisualStylesBug.asp?df=100&forumid=25268&exp=0&select=984714
// Set up localization support early on, so that user-readable strings will be localized
// during the initialization phase below. Use XML files that are embedded resources.
Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CurrentCulture;
Localizer.SetStringLocalizer(new EmbeddedResourceStringLocalizer());
// Enable metadata driven property editing for the DOM
DomNodeType.BaseOfAllTypes.AddAdapterCreator(new AdapterCreator<CustomTypeDescriptorNodeAdapter>());
// Create a type catalog with the types of components we want in the application
var catalog = new TypeCatalog(
typeof(SettingsService), // persistent settings and user preferences dialog
typeof(StatusService), // status bar at bottom of main Form
typeof(CommandService), // handles commands in menus and toolbars
typeof(ControlHostService), // docking control host
typeof(AtfUsageLogger), // logs computer info to an ATF server
typeof(CrashLogger), // logs unhandled exceptions to an ATF server
typeof(UnhandledExceptionService), // catches unhandled exceptions, displays info, and gives user a chance to save
typeof(FileDialogService), // standard Windows file dialogs
typeof(DocumentRegistry), // central document registry with change notification
typeof(AutoDocumentService), // opens documents from last session, or creates a new document, on startup
typeof(RecentDocumentCommands), // standard recent document commands in File menu
typeof(StandardFileCommands), // standard File menu commands for New, Open, Save, SaveAs, Close
typeof(MainWindowTitleService), // tracks document changes and updates main form title
typeof(TabbedControlSelector), // enable ctrl-tab selection of documents and controls within the app
typeof(SkinService), // skin service.
typeof(ContextRegistry), // central context registry with change notification
typeof(StandardFileExitCommand), // standard File exit menu command
typeof(StandardEditCommands), // standard Edit menu commands for copy/paste
typeof(StandardEditHistoryCommands), // standard Edit menu commands for undo/redo
typeof(StandardSelectionCommands), // standard Edit menu selection commands
typeof(StandardLayoutCommands), // standard Format menu layout commands
typeof(StandardViewCommands), // standard View menu commands
//StandardPrintCommands does not currently work with Direct2D
//typeof(StandardPrintCommands), // standard File menu print commands
typeof(HelpAboutCommand), // Help -> About command
typeof(PaletteService), // global palette, for drag/drop instancing
typeof(HistoryLister), // visual list of undo/redo stack
typeof(PropertyEditor), // property grid for editing selected objects
typeof(GridPropertyEditor), // grid control for editing selected objects
typeof(PropertyEditingCommands), // commands for PropertyEditor and GridPropertyEditor, like Reset,
// Reset All, Copy Value, Paste Value, Copy All, Paste All
typeof(PrototypeLister), // editable palette of instantiable item groups
typeof(Outputs), // passes messages to all log writers
typeof(ErrorDialogService), // displays errors to the user in a message box
typeof(Editor), // editor which manages FSM documents and controls
typeof(PaletteClient), // component which adds items to palette
typeof(DefaultTabCommands), // provides the default commands related to document tab Controls
typeof(SchemaLoader), // loads schema and extends types
typeof(PythonService), // scripting service for automated tests
typeof(ScriptConsole), // provides a dockable command console for entering Python commands
typeof(AtfScriptVariables), // exposes common ATF services as script variables
typeof(AutomationService) // provides facilities to run an automated script using the .NET remoting service
);
// Set up the MEF container with these components
var container = new CompositionContainer(catalog);
// Configure the main Form
var batch = new CompositionBatch();
var mainForm = new MainForm(new ToolStripContainer())
{
Text = Application.ProductName,
Icon = GdiUtil.CreateIcon(ResourceUtil.GetImage(Sce.Atf.Resources.AtfIconImage))
};
Sce.Atf.Direct2D.D2dFactory.EnableResourceSharing(mainForm.Handle);
// Add the main Form instance to the container
batch.AddPart(mainForm);
batch.AddPart(new WebHelpCommands("https://github.com/SonyWWS/ATF/wiki/ATF-FSM-Editor-Sample".Localize()));
container.Compose(batch);
// Initialize components that require it. Initialization often can't be done in the constructor,
// or even after imports have been satisfied by MEF, since we allow circular dependencies between
// components, via the System.Lazy class. IInitializable allows components to defer some operations
// until all MEF composition has been completed.
container.InitializeAll();
// Show the main form and start message handling. The main Form Load event provides a final chance
// for components to perform initialization and configuration.
Application.Run(mainForm);
// Give components a chance to clean up.
container.Dispose();
//.........这里部分代码省略.........
示例10: Build
//.........这里部分代码省略.........
this.ExecutePlugIns(ExecutionBehaviors.After);
}
}
AllDone:
TimeSpan runtime = DateTime.Now - buildStart;
this.ReportProgress(BuildStep.Completed, "\r\nBuild completed successfully at {0}. " +
"Total time: {1:00}:{2:00}:{3:00.0000}\r\n", DateTime.Now, Math.Floor(runtime.TotalSeconds / 3600),
Math.Floor((runtime.TotalSeconds % 3600) / 60), (runtime.TotalSeconds % 60));
System.Diagnostics.Debug.WriteLine("Build process finished successfully\r\n");
}
catch(OperationCanceledException )
{
buildCancelling = true;
this.ReportError(BuildStep.Canceled, "BE0064", "BUILD CANCELLED BY USER");
System.Diagnostics.Debug.WriteLine("Build process aborted\r\n");
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
var agEx = ex as AggregateException;
if(agEx != null)
foreach(var inEx in agEx.InnerExceptions)
{
if(message != null)
message += "\r\n\r\n";
message += inEx.Message + "\r\n" + inEx.StackTrace;
}
var bex = ex as BuilderException;
do
{
if(message != null)
message += "\r\n\r\n";
message += ex.Message + "\r\n" + ex.StackTrace;
ex = ex.InnerException;
} while(ex != null);
// NOTE: Message may contain format markers so pass it as a format argument
if(bex != null)
this.ReportError(BuildStep.Failed, bex.ErrorCode, "{0}", message);
else
this.ReportError(BuildStep.Failed, "BE0065", "BUILD FAILED: {0}", message);
System.Diagnostics.Debug.WriteLine("Build process failed\r\n");
}
finally
{
try
{
this.ExecutePlugIns(ExecutionBehaviors.Before);
}
catch(Exception ex)
{
// Not much we can do at this point...
this.ReportProgress(ex.ToString());
}
try
{
this.ExecutePlugIns(ExecutionBehaviors.After);
if(componentContainer != null)
componentContainer.Dispose();
}
catch(Exception ex)
{
// Not much we can do at this point...
this.ReportProgress(ex.ToString());
}
finally
{
if(swLog != null)
{
swLog.WriteLine("</buildStep>\r\n</shfbBuild>");
swLog.Close();
swLog = null;
}
// If we created a copy of the project, dispose of it and return to the original
if(originalProject != null)
{
project.Dispose();
project = originalProject;
}
if(this.CurrentBuildStep == BuildStep.Completed && !project.KeepLogFile)
File.Delete(this.LogFilename);
}
}
}
示例11: ComposeDisposableChildContainer
public void ComposeDisposableChildContainer()
{
var outerContainer = CreateCompositionContainer();
Int32Importer outerImporter = new Int32Importer();
CompositionBatch outerBatch = new CompositionBatch();
var key = outerBatch.AddExportedValue("Value", 42);
outerBatch.AddPart(outerImporter);
outerContainer.Compose(outerBatch);
Assert.AreEqual(42, outerImporter.Value, "Expected value imported from export");
Int32Importer innerImporter = new Int32Importer();
var innerContainer = new CompositionContainer(outerContainer);
CompositionBatch innerBatch = new CompositionBatch();
innerBatch.AddPart(innerImporter);
innerContainer.Compose(innerBatch);
Assert.AreEqual(42, innerImporter.Value, "Expected value imported from export");
Assert.AreEqual(42, outerImporter.Value, "Expected value imported from export");
outerBatch = new CompositionBatch();
outerBatch.RemovePart(key);
key = outerBatch.AddExportedValue("Value", -5);
outerContainer.Compose(outerBatch);
Assert.AreEqual(-5, innerImporter.Value, "Expected update value imported from export");
Assert.AreEqual(-5, outerImporter.Value, "Expected updated value imported from export");
innerContainer.Dispose();
outerBatch = new CompositionBatch();
outerBatch.RemovePart(key);
key = outerBatch.AddExportedValue("Value", 500);
outerContainer.Compose(outerBatch);
Assert.AreEqual(500, outerImporter.Value, "Expected updated value imported from export");
Assert.AreEqual(-5, innerImporter.Value, "Expected value not updated");
}
示例12: Main
static void Main()
{
// Important to call these before starting the app. Otherwise theming and bitmaps may not render correctly.
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents(); // see http://www.codeproject.com/buglist/EnableVisualStylesBug.asp?df=100&forumid=25268&exp=0&select=984714
// Set up localization support early on, so that user-readable strings will be localized
// during the initialization phase below. Use XML files that are embedded resources.
Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CurrentCulture;
Localizer.SetStringLocalizer(new EmbeddedResourceStringLocalizer());
// Using MEF, declare the composable parts that will make up this application
TypeCatalog catalog = new TypeCatalog(
typeof(SettingsService), // persistent settings and user preferences dialog
typeof(CommandService), // handles commands in menus and toolbars
typeof(ControlHostService), // docking control host
typeof(ContextRegistry), // central context registry with change notification
typeof(StandardFileExitCommand), // standard File exit menu command
typeof(FileDialogService), // standard Windows file dialogs
typeof(DocumentRegistry), // central document registry with change notification
typeof(StandardFileCommands), // standard File menu commands for New, Open, Save, SaveAs, Close
typeof(AutoDocumentService), // opens documents from last session, or creates a new document, on startup
typeof(RecentDocumentCommands), // standard recent document commands in File menu
typeof(MainWindowTitleService), // tracks document changes and updates main form title
typeof(AtfUsageLogger), // logs computer info to an ATF server
typeof(WindowLayoutService), // service to allow multiple window layouts
typeof(WindowLayoutServiceCommands), // command layer to allow easy switching between and managing of window layouts
// Client-specific plug-ins
typeof(Editor), // editor class component that creates and saves application documents
typeof(SchemaLoader), // loads schema and extends types
typeof(PythonService), // scripting service for automated tests
typeof(ScriptConsole), // provides a dockable command console for entering Python commands
typeof(AtfScriptVariables), // exposes common ATF services as script variables
typeof(AutomationService) // provides facilities to run an automated script using the .NET remoting service
);
// Create the MEF container for the composable parts
CompositionContainer container = new CompositionContainer(catalog);
// Create the main form, give it a toolstrip
ToolStripContainer toolStripContainer = new ToolStripContainer();
toolStripContainer.Dock = DockStyle.Fill;
MainForm mainForm = new MainForm(toolStripContainer)
{
Text = "Sample Application".Localize(),
Icon = GdiUtil.CreateIcon(ResourceUtil.GetImage(Sce.Atf.Resources.AtfIconImage))
};
// Create an MEF composable part from the main form, and add into container
CompositionBatch batch = new CompositionBatch();
AttributedModelServices.AddPart(batch, mainForm);
container.Compose(batch);
// Initialize components that require it. Initialization often can't be done in the constructor,
// or even after imports have been satisfied by MEF, since we allow circular dependencies between
// components, via the System.Lazy class. IInitializable allows components to defer some operations
// until all MEF composition has been completed.
container.InitializeAll();
// Show the main form and start message handling. The main Form Load event provides a final chance
// for components to perform initialization and configuration.
Application.Run(mainForm);
// Give components a chance to clean up.
container.Dispose();
}
示例13: PartAddedTwice_AppearsTwice
public void PartAddedTwice_AppearsTwice()
{
// You probably shouldn't be adding a part to the container twice, but it's not something we're going to check for and throw an exception on
var container = new CompositionContainer();
var disposable = new AnyPartDisposable();
var part = AttributedModelServices.CreatePart(disposable);
var batch = new CompositionBatch();
batch.AddPart(part);
container.Compose(batch);
batch = new CompositionBatch();
batch.AddPart(part);
container.Compose(batch);
var exports = container.GetExports<AnyPartDisposable>();
Assert.AreEqual(2, exports.Count());
container.Dispose();
}
示例14: Main
//.........这里部分代码省略.........
typeof(LevelEditor.PrototypingService),
typeof(LevelEditor.PrefabService),
typeof(LevelEditor.GameProjectLister),
typeof(LevelEditor.ResourceMetadataService),
typeof(LevelEditor.ResourceConverter),
typeof(LevelEditor.Terrain.TerrainEditor),
typeof(LevelEditor.Terrain.TerrainManipulator),
typeof(LevelEditor.SnapFilter),
typeof(LevelEditor.PickFilters.LocatorPickFilter),
typeof(LevelEditor.PickFilters.BasicShapePickFilter),
typeof(LevelEditor.PickFilters.NoCubePickFilter),
typeof(LevelEditor.Commands.PaletteCommands),
typeof(LevelEditor.Commands.LevelEditorFileCommands),
typeof(LevelEditor.Commands.HelpAboutCommand),
typeof(LevelEditor.Commands.LevelEditorCommands),
typeof(LevelEditor.Commands.LayeringCommands),
typeof(LevelEditor.Commands.PivotCommands)
// To use Open Sound Control (OSC), enable these three components:
//,
//typeof(LevelEditor.OSC.OscClient),
//typeof(OscCommands), // Provides a GUI for configuring OSC support and to diagnose problems.
//typeof(OscCommandReceiver) // Executes this app's commands in response to receiving matching OSC messages.
// Needs to come after all the other ICommandClients in the catalog.
);
TypeCatalog renderingInteropCatalog = new TypeCatalog(
typeof(RenderingInterop.NativeGameEditor),
typeof(RenderingInterop.ThumbnailResolver),
typeof(RenderingInterop.RenderCommands),
typeof(RenderingInterop.AssetResolver),
typeof(RenderingInterop.NativeDesignView),
typeof(RenderingInterop.ResourcePreview),
typeof(RenderingInterop.TranslateManipulator),
typeof(RenderingInterop.ExtensionManipulator),
typeof(RenderingInterop.ScaleManipulator),
typeof(RenderingInterop.RotateManipulator),
typeof(RenderingInterop.TranslatePivotManipulator),
typeof(RenderingInterop.TextureThumbnailResolver)
);
List<ComposablePartCatalog> catalogs = new List<ComposablePartCatalog>();
catalogs.Add(AtfCatalog);
catalogs.Add(LECoreCatalog);
catalogs.Add(renderingInteropCatalog);
catalogs.Add(thisAssemCatalog);
// temp solution, look for statemachine plugin by name.
string pluginDir = Application.StartupPath;
string stmPlg = pluginDir + "\\StateMachinePlugin.dll";
if(File.Exists(stmPlg))
{
Assembly stmPlgAssem = Assembly.LoadFrom(stmPlg);
catalogs.Add(new AssemblyCatalog(stmPlgAssem));
}
AggregateCatalog catalog = new AggregateCatalog(catalogs);
// Initialize ToolStripContainer container and MainForm
ToolStripContainer toolStripContainer = new ToolStripContainer();
toolStripContainer.Dock = DockStyle.Fill;
MainForm mainForm = new MainForm(toolStripContainer);
mainForm.Text = "LevelEditor".Localize("the name of this application, on the title bar");
CompositionContainer container = new CompositionContainer(catalog);
CompositionBatch batch = new CompositionBatch();
AttributedModelServices.AddPart(batch, mainForm);
container.Compose(batch);
LevelEditorCore.Globals.InitializeComponents(container);
// Initialize components
foreach (IInitializable initializable in container.GetExportedValues<IInitializable>())
initializable.Initialize();
AutoDocumentService autoDocument = container.GetExportedValue<AutoDocumentService>();
autoDocument.AutoLoadDocuments = false;
autoDocument.AutoNewDocument = true;
mainForm.Shown += delegate { SplashForm.CloseForm(); };
// The settings file is incompatible between languages that LevelEditor and ATF are localized to.
// For example, the LayoutService saves different Control names depending on the language and so
// the Windows layout saved in one language can't be loaded correctly in another language.
string language = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName; //"en" or "ja"
if (language == "ja")
{
var settingsService = container.GetExportedValue<SettingsService>();
string nonEnglishPath = settingsService.SettingsPath;
nonEnglishPath = Path.Combine(Path.GetDirectoryName(nonEnglishPath), "AppSettings_" + language + ".xml");
settingsService.SettingsPath = nonEnglishPath;
}
Application.Run(mainForm); // MAIN LOOP
container.Dispose();
}
示例15: NonSharedPart_Disposable_ShouldBeDisposedWithContainer
public void NonSharedPart_Disposable_ShouldBeDisposedWithContainer()
{
var catalog = new TypeCatalog(typeof(NonSharedPartDisposable));
var container = new CompositionContainer(catalog);
var export = container.GetExportedValue<NonSharedPartDisposable>();
Assert.IsFalse(export.IsDisposed);
container.Dispose();
Assert.IsTrue(export.IsDisposed, "NonSharedParts should be disposed with the container!");
}