 - *Future enhancements:* this protocol will be generic once we will be able to 
 use generics with Storyboard/Xib
 */
-public protocol ComponentView : class, ViewObserver, HasAssociatedObjects {
+public protocol ComponentView : class, Equatable, ViewObserver, HasAssociatedObjects {
+    associatedtype ViewModelType: ComponentViewModel
+
     /**
     Define the bindings between the fields (IBOutlet) and the ComponentViewModel
     

    bindings
    - parameter viewModel: The `ComponentViewModel` associated to the `UIView`
    */
    func bindings(_ observer: ViewObserver, viewModel: AnyObject)

    /**
     `ComponentViewController` class associated to the `ComponentView`

     - returns: The `ComponentViewController` type.
     The Default implementation returns `ComponentViewController.self`
     */
    static func componentControllerClass() -> AnyComponentController.Type
}

extension ComponentView {

    public static func componentControllerClass() -> AnyComponentController.Type {
        return ViewController<Self>.self
    }
}
