UrlHelper / ActionContext的依赖注入循环引用

时间:2016-01-08 08:10:11

标签: asp.net dependency-injection asp.net-core

我的webapi vNext控制器中需要一个private static void RegisterServices(IKernel kernel) { // Identity kernel.Bind<IUserStore<ApplicationUser>>() .To<UserStore<ApplicationUser>>() .WithConstructorArgument("connectionNameOrUrl", "User.MongoDB"); kernel.Bind<UserManager<ApplicationUser>>() .ToSelf() .InRequestScope() .WithConstructorArgument("store", ctx => ctx.Kernel.Get<IUserStore<ApplicationUser>>()); // Services // Other kernel .Bind<IAzureSettings>() .To<UserAzureSettings>() .InRequestScope(); // Providers kernel .Bind<WebApiUserProvider>() .ToSelf(); kernel .Bind<MVCUserProvider>() .ToSelf(); kernel .Bind<IUserProvider>() .ToMethod((ctx) => { if (HttpContext.Current.Handler.GetType().Namespace.StartsWith("System.Web.Mvc")) { return ctx.Kernel.Get<MVCUserProvider>(new Ninject.Parameters.IParameter[] { }); } else { return ctx.Kernel.Get<WebApiUserProvider>(new Ninject.Parameters.IParameter[] { }); } }) .InRequestScope(); } ,因此我尝试使用构造函数注入它:

UrlHelper

在我的Startup.cs中,我添加了:

public BaseApiController(UrlHelper urlHelper)

但是当我运行它时,它会出错,因为它无法解析services.AddTransient<UrlHelper, UrlHelper>(); 参数来实例化ActionContext。所以我补充道:

UrlHelper

但后来我收到了错误:

services.AddTransient<ActionContext, ActionContext>();

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

原来我可以将Url.Link用于我需要的内容,因此我根本不需要UrlHelper。并不完全解决问题,但它对我有用。