hono式DI

honoでDIするときには、Variablesを用いる。

type Variables: {
	saveUsecase: SaveUsecase
}

これを、Honoインスタンスの生成時にジェネリクスBindingを設定する。

const app = new Hono<{
	Variables: Variables
}>();
 
//または
const app = new OpenAPIHono<{
	Variables: Variables
}>();

useメソッドでミドルウェアを定義する。

app.use(
    '*',
    async (c, next) => {
        const repo = new StorageRepositoryImpl();
        c.set(
            "saveUsecase",
            new SaveUsecase(
                storageRepo
            )
        )
    }
)

これをconroller内などで使用することができる。

pdfController.openapi(uploadRoute, async (c) => {
    const { name } = c.req.valid('param');
 
    const usecase = c.get("saveUsecase");
    const result = await usecase.execute();
	
	//etc
	
    return c.json({ success: true }, 200);
});
 

おわり
index.tsのHonoインスタンスではないです。