我如何Ninject在ASP.NET MVC Web应用程序工作? [英] How do I work with Ninject in an ASP.NET MVC Web App?
本文介绍了我如何Ninject在ASP.NET MVC Web应用程序工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个新的MVC的Web应用程序,我不得不Ninject.dll,Ninject.Web.Common.dll和Ninject.Web.MVC.dll引用。
的Global.asax.cs:
公共类MvcApplication:NinjectHttpApplication
{
公共静态无效RegisterGlobalFilters(GlobalFilterCollection过滤器)
{
filters.Add(新HandleErrorAttribute());
} 公共静态无效的RegisterRoutes(RouteCollection路线)
{
routes.IgnoreRoute({}资源个.axd / {*} PATHINFO); routes.MapRoute(
默认,//路线名称
{控制器} / {行动} / {ID},// URL带参数
新
{
控制器=家,
行动=索引,
ID = UrlParameter.Optional
});
} 保护覆盖的iKernel CreateKernel()
{
VAR内核=新StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
返回内核;
} 保护覆盖无效OnApplicationStarted()
{
base.OnApplicationStarted(); AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
的RegisterRoutes(RouteTable.Routes);
}
}
App_start \\ NinjectWebCommon:
公共静态类NinjectWebCommon
{
私人静态只读引导程序引导程序=新的引导程序(); ///<总结>
///启动应用
///< /总结>
公共静态无效的start()
{
DynamicModuleUtility.RegisterModule(typeof运算(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof运算(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
} ///<总结>
///停止应用程序。
///< /总结>
公共静态无效停止()
{
bootstrapper.ShutDown();
} ///<总结>
///创建将管理应用程序的内核。
///< /总结>
///<收益方式>创建的内核和LT; /回报>
私有静态的iKernel CreateKernel()
{
VAR内核=新StandardKernel();
kernel.Bind<&Func键LT;的iKernel>方式>()ToMethod(CTX =>()=>新建引导程序()内核。);
kernel.Bind&所述; IHttpModule的方式>()到< HttpApplicationInitializationHttpModule>(); RegisterServices(内核);
返回内核;
} ///<总结>
///装入模块或在这里注册您服务!
///< /总结>
///< PARAM NAME =内核方式>内核< /参数>
私有静态无效RegisterServices(内核的iKernel)
{
}
}
我得到错误的顺序不包含元素。我在做什么错了?
错误详细信息:
说明:当前Web请求的执行过程中发生未处理的异常。检查这个错误的详细信息的堆栈跟踪以及它起源于code。异常详细信息:System.InvalidOperationException:序列不包含任何元素源错误:
当前Web请求的执行过程中发生未处理的异常。有关异常的来源和位置信息可以使用异常堆栈跟踪下面确定。
堆栈跟踪:[出现InvalidOperationException:Последовательностьнесодержитэлементов]
System.Linq.Enumerable.Single(IEnumerable`1源)+ 320
Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start()在C:\\项目\\ Ninject \\ ninject.web.mvc \\ MVC3的\\ src \\ Ninject.Web.Mvc \\ NinjectMvcHttpApplicationPlugin.cs:53
Ninject.Web.Common.Bootstrapper<初始化>在C b__0(INinjectHttpApplicationPlugin C):\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ Bootstrapper.cs:52
Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1系列,Action`1动作)在C:\\项目\\ Ninject \\ ninject的\\ src \\ Ninject \\基础设施\\语言\\ ExtensionsForIEnumerableOfT.cs:32
Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback)在C:\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ Bootstrapper.cs:52
Ninject.Web.Common.NinjectHttpApplication.Application_Start()在C:\\项目\\ Ninject \\ Ninject.Web.Common的\\ src \\ Ninject.Web.Common \\ NinjectHttpApplication.cs:80
解决方案
您从 NinjectHttpApplication
导出,并且您使用 App_Start
在同一时间。选一个!阅读Ninject.MVC3 的实况获取更多信息。
I've created a new MVC Web application and I have references to Ninject.dll, Ninject.Web.Common.dll and Ninject.Web.MVC.dll.
Global.asax.cs:
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
App_start\NinjectWebCommon:
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
}
}
I get the error "The sequence contains no elements". What am I doing wrong?
Error details:
Description: An unhandled exception occurred during the execution of the current web request. Examine the stack trace for more information about this error and where it originated in the code.
Exception Details: System.InvalidOperationException: Sequence contains no elements
Source Error:
Unhandled exception occurred during execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[InvalidOperationException: Последовательность не содержит элементов]
System.Linq.Enumerable.Single(IEnumerable`1 source) +320
Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectMvcHttpApplicationPlugin.cs:53
Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1 series, Action`1 action) in c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:32
Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:80
解决方案
You are deriving from NinjectHttpApplication
AND you are using App_Start
at the same time. Choose one! Read the docu of Ninject.MVC3 for more info.
这篇关于我如何Ninject在ASP.NET MVC Web应用程序工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文