小编Sha*_*san的帖子

在Beta8中Asp.Net 5 MVC 6 Startup.cs程序集解耦

我正在使用Asp.Net 5和MVC6在洋葱架构(OA)之后的电子商务网站上工作,这样我们就可以在层之间进行松散耦合.我还想在自己的程序集中解耦启动代码,而不是将它放在MVC项目中.

在同β7这是非常容易的Startup.cs移动到一个类库(引导程序)的解释在这里.使用上述方法的一个有趣的事实是我没有必要从MVC项目引用Bootstrapper程序集.在运行时,在IISExpress下托管,通过程序集扫描,它能够找到Microsoft.AspNet.Hosting.ini文件中提到的Bootstrapper程序集.这可以通过在global.json中指定位置来实现

{
  "projects": [ "Source/Projects","Source/Bootstrapper" ],
  "sdk": {
        "architecture": "x64",
        "runtime": "clr",
        "version": "1.0.0-beta7"
    }
}
Run Code Online (Sandbox Code Playgroud)

Bootstrapper项目将引用所有其他项目,如基础设施,服务等,以便连接依赖注入.

遵循洋葱架构规则,不在MVC项目中引用Bootstrapper项目的原因是避免直接从MVC项目访问基础架构代码.所以这一切都正常,直到我今天早上升级到Beta8.

随着托管模型从IIS更改为Kestrel,我不得不重构global.json和project.json文件,如下所示

global.json

{
  "projects": [ "Source/Projects","Source/Bootstrapper" ],
  "sdk": {
        "architecture": "x64",
        "runtime": "clr",
        "version": "1.0.0-beta8"
    }
}
Run Code Online (Sandbox Code Playgroud)

project.json

{ 
  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8",
    "....",
    "....",
},

 "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"   
    } 
}
Run Code Online (Sandbox Code Playgroud)

进行上述更改后,无论是使用dnx命令还是直接通过Visual Studio运行,我都会收到以下错误

内部服务器错误System.InvalidOperationException在程序集"EcommerceMvcApp"中找不到名为"StartupDevelopment"或"Startup"的类型.在Microsoft.AspNet.Hosting.Startup.StartupLoader.FindStartupType(String startupAssemblyName,IList diagnosticMessages)的Microsoft.AspNet.Hosting.HostingEngine.EnsureStartup()位于Microsoft的Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServices(). AspNet.Hosting.Internal.HostingEngine.BuildApplication()

原来,我必须指定配置文件或内嵌参数网页命令解释这里.按照建议后,我尝试运行应用程序,这次我开始收到以下错误

System.IO.FileNotFoundException无法加载文件或程序集"Bootstrapper"或其依赖项之一.该系统找不到指定的文件.at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase) ,Evidence assemblySecurity,RuntimeAssembly …

asp.net-core-mvc asp.net-core

6
推荐指数
1
解决办法
1119
查看次数

标签 统计

asp.net-core ×1

asp.net-core-mvc ×1