I have the following situation: I have a construction that takes an object in a category $\mathcal{C}$ and via some totally noncanonical choices constructs an object in another category $\mathcal{D}$ where different choices result in (noncanonically) isomorphic objects in $\mathcal{D}$.
I also have a second construction where given morphism in $\mathcal{C}$ say $f: X \to Y$, after choosing objects in $\mathcal{D}$ associated to $X$ and $Y$, say $X'$ and $Y'$, I can construct a map $f' : X' \to Y'$.
Is there a way of putting these constructions together and calling it a functor? It seems I would need a new category instead of $\mathcal{D}$ in which the objects are isomorphism classes of objects in $\mathcal{D}$.
A basic trick here is to "inflate" the category $\mathcal{C}$; e.g.define $\hat{\mathcal{C}}$ to be
The end result is that the functor $\hat{\mathcal{C}} \to \mathcal{C}$ that forgets the choices is an equivalence functor, and when doing your construction on objects of $\hat{\mathcal{C}}$, you now have canonical choices.
Of course, your construction still may or may not be a functor; e.g. you have to check that it preserves identities and composition.
With a sufficiently strong version of the axiom of choice, equivalence functors have weak inverses, so you also get an equivalence functor $\mathcal{C} \to \hat{\mathcal{C}}$ that makes a choice for each object of $\mathcal{C}$, which can be composed with functors $\hat{\mathcal{C}} \to \mathcal{D}$ to get a functor $\mathcal{C} \to \mathcal{D}$