         return ViewModelObservation<ViewModelType>(value: value, container: self.container!)
     }
 
+    public func createObserver() -> ViewObserver {
+        let observer = ViewObserver(container: self.container!)
+
+        self.subObservers.append(observer)
+        return observer
+    }
+
     public func dispose() {
+        self.subObservers.forEach { $0.dispose() }
         self.disposes.forEach { $0() }
         self.disposes.removeAll()
     }

public class ViewObserver {
    public private(set) weak var container: ComponentContainer?
    fileprivate var disposes: [(Void) -> ()] = []

    init(container: ComponentContainer) {
        self.container = container
    }


     `ComponentView`.
     */
    public func observe<AnyValue>(_ value: AnyValue) -> AnyObservation<AnyValue> {
        return AnyObservation(value: value, observer: self.createObserver())
    }

    /**
