Not sure, but I think you need to specify the type parameter to BranchAndBound in solve()
Edit:
julia> methods(BranchAndBound)
# 0 methods for type constructor:
julia> methods(BranchAndBound{MySubProblemFactory})
# 1 method for type constructor:
[1] (::Type{BranchAndBound{F}})(factory::F, dataset::Dataset) where F<:SubProblemFactory in Main at REPL[9]:6