【发布时间】:2018-08-23 10:43:29
【问题描述】:
我正在尝试 ninject.mvc5 对 Web API 应用程序进行 DI。
我在我的主 MVC 项目中添加了 ninject 和 ninject.mvc5。我为 Web API 控制器添加了一个类库并使用了属性路由。我试图在 MVC 项目和类库上使用 Setter Injection 注入一个对象。对象在 MVC 项目中正确注入,而在类库中为空。
以下代码块来自 MVC 应用程序,其中 Stage 包含正确的对象。
public class HomeController : Controller
{
[Inject]
public IStage Stage { get; set; }
}
以下代码来自失败的类库。
public class UserController : ApiController
{
[Inject]
public IStage Stage { get; set; }
}
这里是绑定:
public class WebApiApplication : Ninject.Web.Common.WebHost.NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//RegisterDependencies();
}
protected override IKernel CreateKernel()
{
var kernal = new StandardKernel();
kernal.Load(Assembly.GetExecutingAssembly(),
Assembly.Load("UserLibrary"),
Assembly.Load("StageContracts"),
Assembly.Load("StageLibrary"));
return kernal;
}
}
public class DependencyMapper : NinjectModule
{
public override void Load()
{
this.Bind<IStage>().To<Stage>();
}
}
不确定我在这里缺少什么。任何帮助将不胜感激。
【问题讨论】:
-
您是否为 Web API 正确设置了
DependencyResolver?也建议通过构造函数进行注入。 -
ninject.mvc5 是强制的吗?
-
你的绑定在哪里?
-
我的绑定在 MVC 项目中。下面我在 Global.asax.cs
protected override IKernel CreateKernel() { var kernal = new StandardKernel(); //Added here required assemblies. return kernal; }中添加的代码还添加了 DependencyMapper 类 -
我问的第一件事是
DependencyResolver,这是框架用于注入的。如果配置不正确,那么您将遇到当前遇到的问题。显然,用于 MVC 的那个正在工作。显示 web api 配置。
标签: c# asp.net-web-api dependency-injection asp.net-web-api2 ninject.web.mvc