Я пытаюсь использовать Bootstrapper with Ninject. Я установил Ninject.MVC3
инициализировать мой Ninject контейнер из NuGet и я создал тестовый модуль, как это:Bootstrapper не загружает мои NinjectModules
public class TestNinjectModule : NinjectModule
{
public override void Load()
{
Bind<DBEntities>().ToSelf().InRequestScope();
Bind(typeof(IGenericRepository<>))
.To(typeof(GenericRepository<>)).InRequestScope();
Bind<ISystemRepository>().To<SystemRepository>().InRequestScope();
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
Я также включил Start()
вызов в моей Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrapper.With.Ninject().Start();
Bootstrapper.With.AutoMapper().Start();
}
}
Однако я все еще получаю ActivationException
из Ninject, когда вызывается контроллер с зависимостью, сигнализация моего метода TestNinjectModule.Load()
не вызывалась. Как я могу это решить?
Сообщение исключения:
Ошибка активация IUnitOfWork Нет соответствующие привязки не доступны, и тип не является самим-Привязываемым. Путь Активация: 2) Инъекция зависимостей IUnitOfWork в параметр UnitOfWork конструктора типа> TreasurySystemController 1) Запрос SystemController
Предложения: 1) Убедитесь, что вы определили привязку для IUnitOfWork. 2) Если привязка была определена в модуле, убедитесь, что модуль загружен в> ядро. 3) Убедитесь, что вы случайно не создали несколько ядер. 4) Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствует имени параметра> constructors. 5) Если вы используете автоматическую загрузку модуля, убедитесь, что путь поиска и фильтры> правильные.
Трассировка стека:
в Ninject.KernelBase.Resolve (запрос IRequest) в C: \ Проекты \ Ninject \ Ninject \ SRC \ Ninject \ KernelBase.cs: строка 359 в Ninject.Planning .Targets.Target
1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197 at Ninject.Planning.Targets.Target
1.ResolveWithin (родитель IContext) в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Planning \ Targets \ Target.cs: строка 165 в Ninject.Activation.Providers.StandardProvider.GetValue (контекст IContext , Цель ITarget) в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Providers \ StandardProvider.cs: строка 114 на странице Ninject.Activation.Providers.StandardProvide р. <> c_ DisplayClass4.b _2 (мишень ITarget) в C: \ Проекты \ Ninject \ Ninject \ SRC \ Ninject \ \ активации Провайдеры \ StandardProvider.cs: строка 96 в System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Linq.Buffer
1 .. ctor (IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable
1 источник) at Ninject.Activation.Providers.StandardProvider.Create (контекст IContext) в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Providers \ StandardProvider.cs: строка 96 в Ninject. Activation.Context.Resolve() в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Context.cs: строка 157 в Ninject.KernelBase. <> c_ DisplayClass10.b _c (связывание IBinding) в C: \ Проекты \ Ninject \ Ninject \ SRC \ Ninject \ KernelBase.cs: Строка 386 на System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable
1 источник) на Ninject. Web.Mvc.NinjectDependencyResolver.GetService (тип serviceType) в c: \ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectDependencyResolver.cs: строка 56 в System.Web.Mvc.DefaultControllerFactory .DefaultControllerActivator.Создать (RequestContext requestContext, Type controllerType)
«ActivationException'» ... когда контроллер с зависимостью называется «... какое исключение? что называется? Я думаю, вы, возможно, перескакиваете на преждевременные выводы. Что произойдет, если вы установите точку останова на 'Load'? Что вы видите, когда исследуете Ядро в момент, когда Активация терпит неудачу? –
@RubenBartelink 'ActivationException' - это исключение, вызванное Ninject, когда оно не может разрешить зависимость. Когда я помещал контрольные точки в свои «Application_Start()» и «CreateKernel()» (в классе «NinjectWebCommon», созданный путем установки пакета Nuget Ninject.MVC3'), существует ** два ** ядра, которые создаются, и только один без моих привязок был активирован для разрешения зависимостей. Вот почему я получаю исключение – rexcfnghk
TL; DR - вы не ответили на мои вопросы, поэтому никто еще не ответил на ваш вопрос. Я знаю, что такое ActivationException и многие другие делают; я считаю, что полный StackTrace (это не должно быть 20 страниц), и Message добавляет много. 2 ядра предназначены для 2 HttpApplications. Вы попали в вашу нагрузку()? Является ли неудачное решение [у нас нет stacktrace для] (когда вы сообщаете отладчику обрыв первого шанса), происходящее с ядром с или без привязок. –