伙计们,我正在学习 Asp.net 核心。我面临如何创建服务类型实例的选择。在使用 WCF 时,我曾经编写过一些代码:
public class SomeService:ISomeService
{
[WebInvoke(UriTemplate="action1")]
public void DoSomething1() => new DBAccessBroker1().DoSomethingWithDB();
[WebInvoke(UriTemplate="action2")]
public void DoSomething2() => new DBAccessBroker2().DoSomethingWithDB();
}
在上面的代码中,我在创建服务实例 SomeService 的同时创建了 DBAccessBroker 的实例。现在,在 Asp.net Core 中,可以使用依赖注入实现相同的功能,如下所示:
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<DBAccessBroker1>();
services.AddSingleton<DBAccessBroker2>();
...
}
...
}
public class SomeController : Controller
{
DBAccessBroker1 broker1=null;
DBAccessBroker2 broker2=null;
public SimeController(DBAccessBroker1 broker1,DBAccessBroker2 broker2)
{
this.broker1=broker1;
this.broker2=broker2;
}
[HttpPost("action1")]
public void DoSomething1()=>broker1.DoSomethingWithDB();
[HttpPost("action2")]
public void DoSomething2()=>broker2.DoSomethingWithDB();
}
显然,手动创建实例比使用 DI 更简洁,因为不需要注册 DI 服务并编写一个奇怪的带参数的控制器构造函数,就像从空中来的一样。
另一方面,我相信让微软将 DI 整合到 Asp.Net Core 中一定有好处。我想 DI 应该使用缓存或可重用机制之类的功能来实现。但我没能找到一些文件来确认。所以我想知道是否有一些内部人士或了解更深的人可以告诉我 DI 的基本原理。我需要被说服使用 DI 而不是手动创建我的服务类型的实例。