# HG changeset patch
# User cin
# Date 1455144987 -10800
# Node ID 240aa6994018bec83878f130daa91e23dece8b1a
# Parent ec91a6dfa5b3f458072b9373a36c2e5ddb231c68
component model refactoring
diff -r ec91a6dfa5b3 -r 240aa6994018 Implab/Component.cs
--- a/Implab/Component.cs Thu Feb 04 02:43:05 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Web;
-
-namespace Implab {
- ///
- /// Компоненты являются состовными объектами, имеют детерминированный период жизни, автоматически освобождают ресурсы входящие в них.
- ///
- /// Компонента управляет временем жизни включенных в нее компонент
- public class Component: Disposable {
- LinkedList m_components = new LinkedList();
-
- ///
- /// Коллекция компонент, из которых состоит текущая компонента.
- ///
- public ICollection Components {
- get {
- AssertNotDisposed();
- return m_components;
- }
- }
-
- ///
- /// Освобождает компоненты, входящие в состав текущей компоненты.
- ///
- /// Признак того, что происходит освобождение ресурсов.
- protected override void Dispose(bool disposing) {
- if (disposing) {
- foreach (var item in m_components)
- item.Dispose();
- m_components.Clear();
- }
- base.Dispose(disposing);
- }
- }
-}
\ No newline at end of file
diff -r ec91a6dfa5b3 -r 240aa6994018 Implab/ComponentContainer.cs
--- a/Implab/ComponentContainer.cs Thu Feb 04 02:43:05 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-using System;
-using Implab.Parallels;
-using System.Threading;
-
-namespace Implab {
- public class ComponentContainer : IComponentContainer, IDisposable {
- static readonly ComponentContainer _appContainer;
-
- static ComponentContainer() {
- _appContainer = new ComponentContainer();
- AppDomain.CurrentDomain.ProcessExit += HandleProcessExit;
- }
-
- public static ComponentContainer Global {
- get {
- return _appContainer;
- }
- }
-
- bool m_disposed;
- readonly AsyncQueue m_components = new AsyncQueue();
-
- public void Add(IDisposable item) {
- Safe.ArgumentNotNull(item, "item");
- Thread.MemoryBarrier();
- if (m_disposed) {
- item.Dispose();
- } else {
- m_components.Enqueue(item);
- if (m_disposed && m_components.TryDequeue(out item))
- item.Dispose();
- }
- }
-
- public void Dispose() {
- m_disposed = true;
- IDisposable item;
- while (m_components.TryDequeue(out item))
- item.Dispose();
- }
-
- static void HandleProcessExit (object sender, EventArgs e)
- {
- _appContainer.Dispose();
- }
- }
-}
-
diff -r ec91a6dfa5b3 -r 240aa6994018 Implab/Components/App.cs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/Components/App.cs Thu Feb 11 01:56:27 2016 +0300
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+
+namespace Implab.Components {
+ ///
+ /// Global application components and services.
+ ///
+ public static class App {
+ readonly static ComponentContainer