对于 ASP.NET 核心,我知道如何在类中使用ConfigureServices
方法注册服务Startup
。
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(x => {
var actionContext = x.GetRequiredService<IActionContextAccessor>().ActionContext;
var factory = x.GetRequiredService<IUrlHelperFactory>();
return factory.GetUrlHelper(actionContext);
});
如何在 ASP.NET 样板(ASP.NET Core(项目中使用 IocManager
注册相同的服务,以便可以在应用程序服务中使用它们?
AddSingleton
IocManager.Register<IActionContextAccessor, ActionContextAccessor>();
添加范围 + 工厂
IocManager.IocContainer.Register(
Component
.For<IUrlHelper>()
.UsingFactoryMethod(kernel =>
{
var actionContext = kernel.Resolve<IActionContextAccessor>().ActionContext;
var factory = kernel.Resolve<IUrlHelperFactory>();
return factory.GetUrlHelper(actionContext);
})
.LifestyleCustom<MsScopedLifestyleManager>() // ASP.NET Core
// .LifestylePerWebRequest() // ASP.NET MVC 5
);
引用
- ASP.NET 样板文档:依赖注入 — 自定义/直接注册
- IoC PerWebRequest 和工厂模式:aspnet样板/aspnet样板#3921
- IScopedDependency: aspnet样板/aspnet样板#3945