[英]Pass Interface or Class in Controller Constructor for dependency injection
我的控制器看起来像波纹管。 但是我不知道何时传递接口,何时传递构造函数中的类。 还是真的重要吗? 我搜索但没有得到答案。
public class MyController
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService=myService;
}
}
要么
public class MyController
{
private readonly IMyService _myService;
public MyController(MyService myService)
{
_myService=myService;
}
}
我的依赖注入就像
builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();
public class MyController
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService=myService;
}
}
更好,因为它允许您以其他方式实现IMyService,而无需接触MyController。
您始终需要在构造函数中传递接口(您的第一个实现)。 如果您将在构造函数中传递类,那么依赖注入没有任何好处,因为您已经在告诉构造函数哪个类正在实现此接口和此代码行
builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();
依赖注入是一种用于在运行时而不是编译时绑定接口及其实现的东西。
PS:始终使用第一个实现。 由于是广义概念,因此我无法在此处解释所有内容(尝试在网络上搜索)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.