【发布时间】:2019-04-12 04:55:30
【问题描述】:
我正在尝试在 MVC5 项目中配置 Autofac,以根据请求它的类返回接口的特定实现。
这是我使用 Laravel 框架对 PHP 做的很多事情,它提供了如下解决方案:
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('local');
});
到目前为止,我的谷歌搜索还不够,大多数答案建议我注入一个工厂(调用容器)或它自己的容器,然后从那里提取我需要的服务。
真的没有办法实现类似上面的东西吗?
【问题讨论】:
-
我不确定“when....需要”是什么意思。另外,FileSystem 应该是接口还是基类?您可以:1) 创建一个以 Filesystem 作为参数的 PhotoController 类,或 2) 创建一个以工厂为参数的 PhotoController 类,或 3) 创建一个以委托为参数的 PhotoController 类。如果需要,工厂或委托将负责在运行时创建 Filesystem 的实例。
-
嗨 Jarimba,是的,文件系统将是上面示例中的接口,通常 I 前缀在 PHP 中不使用,但在 IDE 中会很清楚。本质上和英文读的完全一样,当A类需要A接口时,给它B类。这是能够根据我感兴趣的请求者解析接口的逻辑。它在PHP中证明非常有用。
-
@TravisIllig 我有,但没有意识到它在示例的上下文中做了什么,Peter Casjtai 在助手下方的回答将其清除。 :)
标签: c# dependency-injection asp.net-mvc-5 inversion-of-control autofac