Can't inject a delegate using ASP.NET Core DI
说我有一个像这样的MVC核心控制器:
1 2 3 4 5 6 | public class SomeController { public SomeController(IConfiguration appConfig, Func<string> someDelegate) { } } |
此外,我正在使用AutoFac解决注入问题。在添加委托注入时,对象注入可以完美地工作,从而产生一个ASP.NET Core异常,该异常表明无法注入
当我尝试使用AutoFac手动解析
是否有任何方法可以支持这种情况而无需使用AutoFac来解析控制器?
默认情况下,不会通过DI解析控制器,它们是在
更新
这意味着开箱即用的IoC很简单,并且为基本应用程序提供了DI的基础,并且为集成第三方(具有自动发现,装饰等高级功能的IoC容器)提供了简便的方法。他们需要处理
标签帮助器,控制器和视图组件在这方面有所不同,因为它们具有自己的激活器(默认的一个使用激活实用程序,在某些时候,它会使用服务提供者)。因此,
另请参阅此相关答案,以获取有关如何通过DI解析控制器,标记助手和查看组件的详细信息。
1 2 3 4 5 | var builder = services .AddMvc() .AddControllersAsServices() // this one for your case .AddViewComponentsAsServices() .AddTagHelpersAsServices(); |
我本人只是遇到了这个问题,所以我想分享给以后参考,因为我有一个案例想解决一个委托,但包括一个额外的库似乎有点过头了。
给出以下定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public interface ISomething { /*...*/ }; public interface ISomeService { /*...*/ } public class SomeService : ISomeService { /*...*/ } public class Something { public Something(ISomeService service, string key) { /*...*/ } } // I prefer using a delegate for readability but you // don't have to use one public delegate ISomething CreateSomething(string key); |
代表可以这样注册:
1 2 3 | var builder = services .AddSingleton<ISomeService, SomeService>() .AddTrasient<CreateSomething>(provider => key => new Something(provider.GetRequiredService<ISomeService>(), key)); |