 
     private lazy var view = View()
 
-    func sizeFor(
+    public init() {}
+
+    public func sizeFor(
         viewModel: ViewModel,
         width: Dimension = .compressed,
         height: Dimension = .compressed,

    private var sizer = Sizer()
    private var cache = [Key: CGSize]()

    func sizeFor(
        viewModel: Sizer.ViewModel,
        width: Sizer.Dimension = .compressed,
        height: Sizer.Dimension = .compressed,

    }
}

public struct ConstantSizerCacheKey: Hashable {}

public protocol SizerViewModelView: ReusableViewModelView {

    associatedtype SizerCacheKey: Hashable = ConstantSizerCacheKey

    static func sizerCacheKeyFor(viewModel: ViewModel) -> SizerCacheKey
}

public extension SizerViewModelView where SizerCacheKey == ConstantSizerCacheKey {

    static func sizerCacheKeyFor(viewModel: ViewModel) -> SizerCacheKey { return SizerCacheKey() }
}

public final class CollectionReusableViewSizerCache<View: UICollectionReusableView & SizerViewModelView> {

    public typealias Sizer = CollectionReusableViewSizer<View>

    private struct Key: Hashable {
        let key: View.SizerCacheKey
