【发布时间】:2020-08-22 23:45:40
【问题描述】:
我有以下问题。我有一个由 2 个类实现的接口。其中一个类执行实际工作,而另一个使用提到的第一个类。 在实例化一种类型的对象时,如何告诉框架使用接口的特定实现? 我希望控制器获得外观实现,而不是真正的实现:
public interface IDependency
{
void Method();
}
public class Real : IDependency
{
public void Method()
{
}
}
public class Facade : IDependency
{
private IDependency dependency;
Facade(IDependency dependency) //I want a Real here
{
this.dependency=dependency;
}
public void Method()=>dependency.Method();
}
public MyController : Controller
{
private IDependency dependency;
MyController(IDependency dependency) //I want the `Facade` here not the `Real`
{
this.dependency=dependency;
}
[HttpGet]
[Route("[some route]")]
public async Task CallMethod()
{
await this.dependency.Method();
}
}
正如您在上面的示例中看到的,我需要在我的Facade 中注入Real 类型的IDependency,而我需要在我的MyController 中注入Facade 类型的IDependency。
怎么可能呢?
【问题讨论】:
标签: c# asp.net-core dependency-injection facade