我尝试创建只是示例的项目,我想使用Ninject.I像这样创建NinjectControllerFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Ninject;
using System.Web.Routing;
using Moq;
using System.Linq;
using SportStore.Domain.Entities;
using SportStore.Domain.Abstract;
using System.Collections.Generic;
using SportStore.Domain.Concrete;
namespace SportStore.WebUI.Infrastructure
{
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null
? null
: (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<IProductsRepository>().To<EFProductRepository>();
}
}
}
我像这样创建IProductRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportStore.Domain.Entities;
namespace SportStore.Domain.Abstract
{
public interface IProductsRepository
{
IQueryable<Product> Products { get; }
}
}
最后一个像这样的EFProductRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportStore.Domain.Abstract;
using SportStore.Domain.Entities;
namespace SportStore.Domain.Concrete
{
public class EFProductRepository : IProductsRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
}
}
因此,当我运行项目时,我收到此错误
无法加载文件或程序集&#39; EntityFramework,Version = 6.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.IO.FileLoadException:无法加载文件或 assembly&#39; EntityFramework,Version = 6.0.0.0,Culture = neutral, 公钥= b77a5c561934e089&#39;或其中一个依赖项。该 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040)
来源错误:
第11行:公共类EFProductRepository:IProductsRepository 第12行:{第13行:私有EFDbContext上下文=新 EFDbContext();第14行:第15行:公共IQueryable 产品
源文件:c:\ Users \ Ayyildiz \ Documents \ Visual Studio 2012 \项目\ SportStore \ SportStore.Domain \混凝土\ EFProductRepository.cs 行:13
装配加载跟踪:以下信息可能对您有所帮助 确定程序集&#39; EntityFramework,Version = 6.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;无法加载。
===预绑定状态信息===日志:用户= Ayyildiz-PC \ Ayyildiz日志:DisplayName = EntityFramework,Version = 6.0.0.0,Culture = neutral, PublicKeyToken = b77a5c561934e089(完全指定)LOG:Appbase = file:/// C:/ Users / Ayyildiz / Documents / Visual Studio 2012 / Projects / SportStore / SportStore.WebUI / LOG:Initial PrivatePath = C:\ Users \ Ayyildiz \ Documents \ Visual Studio 2012 \ Projects \ SportStore \ SportStore.WebUI \ bin调用程序集: SportStore.Domain,版本= 1.0.0.0,文化=中立, 公钥=空。 ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\ Users \ Ayyildiz \ Documents \ Visual Studio 2012 \ Projects \ SportStore \ SportStore.WebUI \ web.config日志:使用 主机配置文件: C:\ Users \ Ayyildiz \ Documents \ IISExpress \ config \ aspnet.config日志:使用 来自的机器配置文件 C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。 日志:政策后参考:EntityFramework,版本= 6.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089日志:正在尝试 下载新的URL file:/// C:/ Users / Ayyildiz / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 85c19813 / 4c228712 / EntityFramework.DLL。日志:正在尝试 下载新的URL file:/// C:/ Users / Ayyildiz / AppData / Local / Temp / Temporary ASP.NET 文件/根/ 85c19813 / 4c228712 /的EntityFramework / EntityFramework.DLL。日志: 试图下载新的URL file:/// C:/ Users / Ayyildiz / Documents / Visual Studio 2012 /项目/ SportStore / SportStore.WebUI /斌/ EntityFramework.DLL。 警告:比较程序集名称导致不匹配:重大 版本错误:无法完成装配设置(hr = 0x80131040)。 探测终止。
堆栈追踪:
[FileLoadException:无法加载文件或程序集&#39; EntityFramework, Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;要么 其中一个依赖项。定位程序集的清单定义 与装配参考不匹配。 (HRESULT的例外情况: 0x80131040)] SportStore.Domain.Concrete.EFProductRepository..ctor() 在c:\ Users \ Ayyildiz \ Documents \ Visual Studio中 2012 \项目\ SportStore \ SportStore.Domain \混凝土\ EFProductRepository.cs:13 DynamicInjectorc6bf6cff03594d109af1167280b346c5(Object [])+70
Ninject.Activation.Providers.StandardProvider.Create(IContext context) 在 C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:97 Ninject.Activation.Context.Resolve()in C:\项目\ Ninject \ ninject的\ src \ Ninject \激活\ Context.cs:157
Ninject。&lt;&gt; c_ DisplayClass10.b _c(IBinding binding)in C:\项目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:386
System.Linq.WhereSelectEnumerableIterator2.MoveNext() +145
1 source)+4077101 Ninject.Planning.Targets.Target
System.Linq.Enumerable.SingleOrDefault(IEnumerable1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:197 Ninject.Planning.Targets.Target
1.ResolveWithin(IContext parent)in C:\项目\ Ninject \ ninject的\ src \ Ninject \规划\目标\ Target.cs:165 Ninject.Activation.Providers.StandardProvider.GetValue(IContext 上下文,IT目标) C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:114 Ninject.Activation.Providers&LT;&GT; C_ DisplayClass4.b _2(ITarget 目标) C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:96 System.Linq.WhereSelectArrayIterator2.MoveNext() +66
1..ctor(IEnumerable
System.Linq.Buffer1 source) +216
1来源)+77
System.Linq.Enumerable.ToArray(IEnumerable
Ninject.Activation.Providers.StandardProvider.Create(IContext context) 在 C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:96 Ninject.Activation.Context.Resolve()in C:\项目\ Ninject \ ninject的\ src \ Ninject \激活\ Context.cs:157
Ninject。&lt;&gt; c_ DisplayClass10.b _c(IBinding binding)in C:\项目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:386
System.Linq.WhereSelectEnumerableIterator2.MoveNext() +145
1 source)+191
System.Linq.Enumerable.Single(IEnumerable
Ninject.ResolutionExtensions.Get(IResolutionRoot root,Type service, IParameter []参数)in C:\项目\ Ninject \ ninject \ SRC \ Ninject \语法\ ResolutionExtensions.cs:151 SportStore.WebUI.Infrastructure.NinjectControllerFactory.GetControllerInstance(的RequestContext requestContext,输入controllerType) c:\ Users \ Ayyildiz \ Documents \ Visual Studio 2012 \项目\ SportStore \ SportStore.WebUI \基础设施\ NinjectControllerFactory.cs:29 System.Web.Mvc.DefaultControllerFactory.CreateController(的RequestContext requestContext,String controllerName)+226
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext,IController&amp;控制器,IControllerFactory&amp;厂) +326 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback回调,对象状态)+177
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback回调,对象状态)+88
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext的 context,AsyncCallback cb,Object extraData)+50
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+155版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.17929
我正在使用EntityFramework v6,而我正在使用MSSQL server 2008 r2。 NinjectControllerFactory.cs中的此错误将此行
return controllerType == null
? null
: (IController)ninjectKernel.Get(controllerType);
有人可以帮我吗?感谢
答案 0 :(得分:1)
我遇到了同样的问题,这就是我所做的修复我的事情。也许,这会帮助你解决问题。
问题似乎是您的参考文献(SportsStore.Domain和SportsStore.WebUI)中的EntityFramework版本号以及SportsStore.WebUI中的web.config。
检查每个EntityFramework引用并将每个版本更改为6.0.0.0。在SportsStore.WebUI中,您将无法更改它,因为它从您的web.config获取条目。因此,只需从SportsStore.WebUI中删除EntityFramework引用即可。编译,它应该工作。
我希望这会有所帮助。
答案 1 :(得分:0)
只需从所有地方删除引用,并检查不同的配置文件 来自web ui的web.config,packges.config 和来自域
的web.config,packges.confg评论所有已放置然后添加新参考。