Startup.cs
public void ConfigureServices(IServiceCollection services){ /*boilerplate's default bindings*/ services.AddTransient<IDummy,Dummy>(p => new Dummy() { name = "from injection" }); }
HomeController.cs
public IActionResult Index(IDummy dummy){ var test = dummy.name; return this.View(HomeControllerAction.Index); }
例外:
ArgumentException: Type
‘Presentation.WebUI.Controllers.IDummy’ does not have a
default constructor
你能告诉我我做错了什么吗?
解决方法
当框架默认使用构造函数注入时,您正尝试对Action执行注入.
参考:Dependency Injection and Controllers
ASP.NET Core’s built-in support for constructor-based dependency
injection extends to MVC controllers. By simply adding a service type
to your controller as a constructor parameter,ASP.NET Core will
attempt to resolve that type using its built in service container.
public class HomeController : Controller { IDummy dummy; public HomeController(IDummy dummy) { this.dummy = dummy } public IActionResult Index(){ var test = dummy.name; return this.View(HomeControllerAction.Index); } }
ASP.NET Core MVC controllers should request their dependencies
explicitly via their constructors. In some instances,individual
controller actions may require a service,and it may not make sense to
request at the controller level. In this case,you can also choose to
inject a service as a parameter on the action method.
Action Injection with FromServices
Sometimes you don’t need a service for more than one action within
your controller. In this case,it may make sense to inject the service
as a parameter to the action method. This is done by marking the
parameter with the attribute [FromServices] as shown here:
public IActionResult Index([FromServices] IDummy dummy) { var test = dummy.name; return this.View(HomeControllerAction.Index); }