使用ASP.net v5 RC1进行Autofac

时间:2015-12-08 22:30:02

标签: asp.net-core autofac

我试图使用autofac与asp.net 5 rc1和所有的指南我看起来似乎不适用于rc1这里是我的代码

 public IServiceProvider ConfigureServices(IServiceCollection services)
    {
      ...
        services.AddCaching();
        services.AddMvc();
        services.AddSession();


        // Add application services.
        services.AddTransient<IEmailSender, AuthMessageSender>();
        services.AddTransient<ISmsSender, AuthMessageSender>();
        // Create the Autofac container builder.
        var builder = new ContainerBuilder();
        // Add any Autofac modules or registrations.
        builder.RegisterModule(new DiRegistration());
        // Populate the services.
       //This Line fails 
        builder.Populate(services);
        // Build the container.
        var container = builder.Build();
        // Resolve and return the service provider.
        return container.Resolve<IServiceProvider>();
    }

调用builder.Populate(services)时;我收到此错误

无法转换为&#39; Microsoft.Extensions.DependencyInjection.IServiceCollection&#39;到&#39; System.Collections.Generic.IEnumerable&#39; Web.DNX 4.5.1 C:\ SVN \ Datayal2 \ Web \ src \ Web \ Startup.cs 81

这是我的项目json

    {
  "userSecretsId": "aspnet5-Web-bb6d2db2-bbf8-461d-8865-db72b039dd7f",
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Autofac": "4.0.0-beta8-157",
    "Autofac.Framework.DependencyInjection": "4.0.0-beta8-157",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.Session": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.Caching.SqlConfig": "1.0.0-rc1-final",
    "Microsoft.Extensions.Caching.SqlServer": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": {
      "dependencies": {
        "Shared": "1.0.0-*"
      },
      "frameworkAssemblies": {
        "System.configuration": "4.0.0.0"
      }
    }

  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ],
  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}

请帮助我确定它可能只是某些命名空间发生了变化,但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:1)

您需要将Autofac.Framework.DependencyInjection更新为兼容rc1的软件包。您可以使用此symver 4.0.0-rc1-*始终使用最新的rc1软件包,或者如果不起作用,请安装我知道与rc1(4.0.0-rc1-177)兼容的最新特定版本(在撰写本文时)

如果出于某种原因Nuget Feed不起作用,您可能还需要添加autofac的MyGet Feed网址(https://www.myget.org/F/autofac/api/v3/index.json)。

您可以从MyGet找到所有autofac的预发布包。

此外,当您引用Autofac.Framework.DependencyInjection时,您也不需要明确引用Autofac包,因为它会自动将其下拉。这样可以避免在project.json中指定这两个版本。简而言之,您在project.json中所需要的只是:

"dependencies": {
    "Autofac.Extensions.DependencyInjection": "4.0.0-rc1-177"
}

答案 1 :(得分:0)

好的我发现问题是一些名称空间更改看起来像autofac包与rc1兼容,但是Autofac.Extensions.DependencyInjection没有rc1 nuget包但我为了让它工作而做的是我下载了rc1 gitHub完成所有工作之后{/ 3}}。