[proofplan]
We embed an arbitrary left $R$-module $M$ into its double character module with respect to $\mathbb{Q}/\mathbb{Z}$. The key algebraic facts are that $\mathbb{Q}/\mathbb{Z}$ is an injective cogenerator of abelian groups, and that for every right $R$-module $N$, the character module $\operatorname{Hom}_{\mathbb{Z}}(N,\mathbb{Q}/\mathbb{Z})$ is injective as a left $R$-module. Taking $N=\operatorname{Hom}_{\mathbb{Z}}(M,\mathbb{Q}/\mathbb{Z})$ gives an injective left $R$-module, and the evaluation map embeds $M$ into it.
[/proofplan]
[step:Show that $\mathbb{Q}/\mathbb{Z}$ is an injective cogenerator of abelian groups]
Let $D:=\mathbb{Q}/\mathbb{Z}$, regarded as a $\mathbb{Z}$-module. The group $D$ is divisible: for every $d=q+\mathbb{Z}\in D$ and every integer $n\geq 1$, the element $q/n+\mathbb{Z}\in D$ satisfies
\begin{align*}
n(q/n+\mathbb{Z})=q+\mathbb{Z}=d.
\end{align*}
[claim:Every divisible abelian group is injective as a $\mathbb{Z}$-module]
Let $D_0$ be a divisible abelian group. For every inclusion of abelian groups $A\subset B$ and every group homomorphism $f:A\to D_0$, there exists a group homomorphism $F:B\to D_0$ such that $F|_A=f$.
[/claim]
[proof]
Consider the set $\mathcal{S}$ of pairs $(C,g)$ where $C$ is a subgroup of $B$ with $A\subset C$, and $g:C\to D_0$ is a group homomorphism satisfying $g|_A=f$. Order $\mathcal{S}$ by extension: $(C,g)\leq (C',g')$ if $C\subset C'$ and $g'|_C=g$. Every chain has an upper bound obtained by taking the union of the subgroups and the compatible union of the homomorphisms, so [Zorn's lemma](/theorems/1226) gives a maximal pair $(C_{\max},g_{\max})$.
We prove $C_{\max}=B$. Suppose not, and choose $b\in B\setminus C_{\max}$. Define
\begin{align*}
I_b:=\{n\in \mathbb{Z}: nb\in C_{\max}\}.
\end{align*}
Then $I_b$ is an ideal of $\mathbb{Z}$, hence either $I_b=\{0\}$ or $I_b=m\mathbb{Z}$ for a unique integer $m\geq 1$.
If $I_b=\{0\}$, define $C':=C_{\max}+\mathbb{Z}b$ and define
\begin{align*}
g':C'&\to D_0\\
c+kb&\mapsto g_{\max}(c)
\end{align*}
for $c\in C_{\max}$ and $k\in\mathbb{Z}$. The condition $I_b=\{0\}$ implies that this representation is unique, so $g'$ is well-defined and extends $g_{\max}$, contradicting maximality.
If $I_b=m\mathbb{Z}$ with $m\geq 1$, then $mb\in C_{\max}$. Since $D_0$ is divisible, choose $d\in D_0$ such that
\begin{align*}
md=g_{\max}(mb).
\end{align*}
Define $C':=C_{\max}+\mathbb{Z}b$ and
\begin{align*}
g':C'&\to D_0\\
c+kb&\mapsto g_{\max}(c)+kd.
\end{align*}
To check well-definedness, suppose $c+kb=0$. Then $kb=-c\in C_{\max}$, so $k\in I_b=m\mathbb{Z}$. Write $k=mt$ with $t\in\mathbb{Z}$. Since $c=-mtb$, we get
\begin{align*}
g_{\max}(c)+kd
&=g_{\max}(-tmb)+mtd\\
&=-t g_{\max}(mb)+tmd\\
&=0.
\end{align*}
Thus $g'$ is a well-defined homomorphism extending $g_{\max}$, again contradicting maximality. Therefore $C_{\max}=B$, and $D_0$ is injective.
[/proof]
Applying the claim to $D=\mathbb{Q}/\mathbb{Z}$, we conclude that $D$ is injective as a $\mathbb{Z}$-module.
It remains to show that $D$ is a cogenerator. Let $A$ be a nonzero abelian group and choose $a\in A$ with $a\neq 0$. If $a$ has infinite order, define a homomorphism
\begin{align*}
h_0:\mathbb{Z}a&\to D\\
ka&\mapsto k(1/2+\mathbb{Z}).
\end{align*}
If $a$ has finite order $m\geq 2$, define
\begin{align*}
h_0:\mathbb{Z}a&\to D\\
ka&\mapsto k(1/m+\mathbb{Z}).
\end{align*}
In both cases $h_0(a)\neq 0$. Since $D$ is injective, $h_0$ extends to a homomorphism $h:A\to D$. Hence every nonzero abelian group admits a nonzero homomorphism into $D$.
[/step]
[step:Build an injective left $R$-module by coinduction from abelian groups]
Define the abelian group
\begin{align*}
E_0:=\operatorname{Hom}_{\mathbb{Z}}(R,D),
\end{align*}
and make it a left $R$-module by
\begin{align*}
(r\varphi)(s):=\varphi(sr)
\end{align*}
for $r\in R$, $\varphi\in E_0$, and $s\in R$. The associativity and unit axioms follow from multiplication in $R$:
\begin{align*}
((rs)\varphi)(t)
&=\varphi(t rs)
=(s\varphi)(t r)
=(r(s\varphi))(t),\\
(1_R\varphi)(t)
&=\varphi(t1_R)
=\varphi(t)
\end{align*}
for every $t\in R$.
We prove that $E_0$ is injective as a left $R$-module. Let $A$ and $B$ be left $R$-modules, let $\alpha:A\to B$ be an injective left $R$-module homomorphism, and let $f:A\to E_0$ be a left $R$-module homomorphism. Define the abelian group homomorphism
\begin{align*}
f_1:A&\to D\\
a&\mapsto f(a)(1_R).
\end{align*}
Since $D$ is injective as a $\mathbb{Z}$-module and $\alpha:A\to B$ is an injective homomorphism of abelian groups after forgetting the $R$-module structure, there exists an abelian group homomorphism $g_1:B\to D$ such that $g_1\circ \alpha=f_1$.
Define
\begin{align*}
g:B&\to E_0\\
b&\mapsto g(b),
\end{align*}
where
\begin{align*}
g(b):R&\to D\\
s&\mapsto g_1(sb).
\end{align*}
For each $b\in B$, the map $g(b):R\to D$ is a homomorphism of abelian groups because the scalar multiplication map $R\to B$, $s\mapsto sb$, is additive and $g_1$ is additive. The map $g$ is additive for the same reason. It is left $R$-linear: for $r\in R$, $b\in B$, and $s\in R$,
\begin{align*}
g(rb)(s)
&=g_1(srb)\\
&=g(b)(sr)\\
&=(rg(b))(s).
\end{align*}
Finally, for $a\in A$ and $s\in R$, the $R$-linearity of $\alpha$ and $f$ gives
\begin{align*}
g(\alpha(a))(s)
&=g_1(s\alpha(a))\\
&=g_1(\alpha(sa))\\
&=f_1(sa)\\
&=f(sa)(1_R)\\
&=(sf(a))(1_R)\\
&=f(a)(1_Rs)\\
&=f(a)(s).
\end{align*}
Thus $g\circ \alpha=f$. Hence every left $R$-module homomorphism $A\to E_0$ extends across every monomorphism $A\hookrightarrow B$, so $E_0$ is injective as a left $R$-module.
[/step]
[step:Embed an arbitrary left $R$-module into a product of coinduced injectives]
Let $M$ be a left $R$-module. Define the abelian group
\begin{align*}
M^\vee:=\operatorname{Hom}_{\mathbb{Z}}(M,D).
\end{align*}
Let $E$ be the product of copies of $E_0=\operatorname{Hom}_{\mathbb{Z}}(R,D)$ indexed by the set $M^\vee$:
\begin{align*}
E:=\prod_{\lambda\in M^\vee}E_0.
\end{align*}
We give $E$ the product left $R$-module structure.
The product $E$ is injective. Indeed, if $A\hookrightarrow B$ is a monomorphism of left $R$-modules, then applying $\operatorname{Hom}_R(-,E)$ gives
\begin{align*}
\operatorname{Hom}_R(B,E)
&\cong \prod_{\lambda\in M^\vee}\operatorname{Hom}_R(B,E_0),\\
\operatorname{Hom}_R(A,E)
&\cong \prod_{\lambda\in M^\vee}\operatorname{Hom}_R(A,E_0).
\end{align*}
Since each $E_0$ is injective by the preceding step, every component map $\operatorname{Hom}_R(B,E_0)\to \operatorname{Hom}_R(A,E_0)$ is surjective; hence their product is surjective. Thus every left $R$-module homomorphism $A\to E$ extends across $A\hookrightarrow B$, so $E$ is injective.
Define
\begin{align*}
\iota:M&\to E\\
m&\mapsto (\iota_\lambda(m))_{\lambda\in M^\vee},
\end{align*}
where, for each $\lambda\in M^\vee$,
\begin{align*}
\iota_\lambda(m):R&\to D\\
s&\mapsto \lambda(sm).
\end{align*}
For each $m\in M$ and $\lambda\in M^\vee$, the map $\iota_\lambda(m):R\to D$ is an abelian group homomorphism, so $\iota_\lambda(m)\in E_0$. The map $\iota$ is left $R$-linear because for $r\in R$, $m\in M$, $\lambda\in M^\vee$, and $s\in R$,
\begin{align*}
\iota_\lambda(rm)(s)
&=\lambda(srm)\\
&=\iota_\lambda(m)(sr)\\
&=(r\iota_\lambda(m))(s).
\end{align*}
We show that $\iota$ is injective. Let $m\in M$ with $m\neq 0$. Since $D$ is a cogenerator of abelian groups, there exists an abelian group homomorphism $\lambda:M\to D$ such that $\lambda(m)\neq 0$. This $\lambda$ is an element of $M^\vee$, and the $\lambda$-component of $\iota(m)$ satisfies
\begin{align*}
\iota_\lambda(m)(1_R)=\lambda(1_Rm)=\lambda(m)\neq 0.
\end{align*}
Hence $\iota(m)\neq 0$, so $\ker \iota=0$. Thus $\iota:M\to E$ is an injective $R$-[linear map](/page/Linear%20Map) into an injective left $R$-module.
[/step]
[step:Conclude that $R\operatorname{-Mod}$ has enough injectives]
For the arbitrary left $R$-module $M$, we have constructed an injective left $R$-module
\begin{align*}
E=\prod_{\lambda\in \operatorname{Hom}_{\mathbb{Z}}(M,D)}\operatorname{Hom}_{\mathbb{Z}}(R,D)
\end{align*}
and an injective $R$-linear map $\iota:M\to E$. Since $M$ was arbitrary, every object of $R\operatorname{-Mod}$ embeds into an injective object. Therefore $R\operatorname{-Mod}$ has enough injectives.
[/step]