У меня есть проект ASP.NET MVC 4.7.2.Я использую NInject (обновлен сегодня) до 3.3.4 для поддержки зависимостей.Я не использую Интернет. Обычная вещь, которую толкает NInject.Вместо этого у меня есть:
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);
}
}
Я использую тот же распознавательдля веб-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;
}
Это все работает для меня в течение некоторого времени.Сегодня у меня есть контроллер Home:
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. Я получаю исключение, которое говорит: «Для этого объекта не определен конструктор без параметров».Этот код работал до сих пор.Есть идеи, где ошибка?