asp.net-mvc - NInject 没有解析 HomeController
问题描述
我有一个 ASP.NET MVC 4.7.2 项目。我使用 NInject(今天更新到)3.3.4 来维护依赖关系。我不使用 NInject 推送的 web.Common 东西。相反,我有:
public static class ResolverConfig
{
public static void RegisterResolver()
{
INinjectModule module = new MyModule();
IResolutionRoot kernel = new StandardKernel(module);
NinjectDependencyResolver resolver = new NinjectDependencyResolver(kernel);
DependencyResolver.SetResolver(resolver);
}
}
在 global.asax 中有:
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
ResolverConfig.RegisterResolver();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
NinjectDependencyResolver 是:
public class NinjectDependencyResolver :
NinjectDependencyScope,
System.Web.Http.Dependencies.IDependencyResolver,
System.Web.Mvc.IDependencyResolver
{
public NinjectDependencyResolver(IResolutionRoot resolver) : base(resolver)
{
}
public System.Web.Http.Dependencies.IDependencyScope BeginScope()
{
return new NinjectDependencyScope(Resolver);
}
}
我对 Web Api 和网页使用相同的解析器。NinjectDependencyScope:
public class NinjectDependencyScope: IDependencyScope
{
public NinjectDependencyScope(IResolutionRoot resolver)
{
Resolver = resolver ?? throw new ArgumentNullException(nameof(resolver));
}
protected IResolutionRoot Resolver { get; }
public void Dispose()
{
}
public object GetService(Type serviceType)
{
object instance = null;
if (serviceType != null)
{
instance = Resolver.TryGet(serviceType);
}
return instance;
}
public IEnumerable<object> GetServices(Type serviceType)
{
var all = serviceType != null ?
Resolver.GetAll(serviceType) :
new object[0];
return all;
}
这一切都为我工作了一段时间。今天我有一个家庭控制器:
public class HomeController: Controller
{
public HomeController(IFindTerminalState engine, IWriteSubscriptionRecord writer)
{
Engine = engine;
Writer = writer;
}
private IFindTerminalState Engine { get; }
private IWriteSubscriptionRecord Writer { get; }
[Route("Home/Index/{email?}/{returnUrl?}")]
public async Task<ActionResult> Index(...)
{
....
}
...
}
我有一个模块:
public class MyModule: NinjectModule
{
public override void Load()
{
...
Bind<IFindTerminalState>().To<FindTerminalState>();
...
string subscriptionApi = ...
Bind<IWriteSubscriptionRecord>()
.To<WriteMySubscriptionRecord>()
.WithConstructorArgument("subscriptionApi", subscriptionApi);
}
}
在 HomeController 中注入的两个服务都在模块中。我启动网站并导航到 ~/Home/Index/bob@example%2Ecom/example%2Ecom 我收到一个异常,上面写着“没有为此对象定义无参数构造函数”。这段代码一直工作到现在。知道错误在哪里吗?
解决方案
我是一个白痴。IWriteSubscriptionRecord 服务本身有一个依赖项,我没有注意到它。Ninject 模块尚未完成。
推荐阅读
- javascript - 当我在 asp.net mvc 中使用 javascript 单击按钮时,我无法将产品添加到购物车
- python - 使用 crontab 自动执行位于 Digital Ocean 液滴上的 python 脚本?
- flutter - 如果列表颤动中的参数为真,如何返回类字段
- javascript - 我的 jQuery 代码应该放在 Javascript 文件中的什么位置?
- clojure - Clojure:有没有办法删除一个键但保留它的值
- javascript - 检查一个范围的列标题并对另一个范围的单元格进行操作
- javascript - 在javascript中确定整数的乘积是偶数还是奇数
- javascript - CRUD - 我无法将特定数据发送到数据库
- javascript - 当元素在视口中时启动打字机效果
- reactjs - TypeError: undefined is not an object (评估 'data[imageKey].urls')