我正在尝试在MVC5项目中配置Autofac,以根据请求接口的类返回接口的特定实现。
这是我使用Laravel框架使用PHP所做的很多事情,该框架提供了如下解决方案:
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('local');
});
到目前为止,我在Google上搜索不足,大多数答案都建议我注入工厂(称为容器)或容器本身,然后从那里提取所需的服务。
真的没有办法实现与上述相似的事情吗?
答案 0 :(得分:2)
有一些注册条件依赖项的选项,Autofac最简单的方法是命名注册(AFAIK):
builder.Register(c => new DiskStorage()).Named<IStorage>("disk");
builder.Register(c => new PhotoController(c.ResolveNamed<IStorage>("disk")));