【问题标题】:Getting Autofac to work with MVC6/ASP.NET5让 Autofac 与 MVC6/ASP.NET5 一起工作
【发布时间】:2015-12-31 17:57:59
【问题描述】:

我无法让 autofac 工作,我已经查看了这个 potentially duplicate 问题,但它没有帮助。

我正在使用完整的 .NET 堆栈,DNX 4.5.1

我已包含以下依赖项。

  "dependencies": {
    // matched latest autofac version with latest dependencyinjection version.
    "Autofac": "4.0.0-beta8-157",
    "Autofac.Framework.DependencyInjection": "4.0.0-beta8-157",    
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final" ...

还有下面的初始化代码。

// void?
public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc();

     var container = new ContainerBuilder();
     ...
     // compilation error here!
     container.Populate(services);
}

我收到此错误:

Error   CS1503  Argument 2: cannot convert
from'Microsoft.Extensions.DependencyInjection.IServiceCollection' to
'System.Collections.Generic.IEnumerable<Microsoft.Framework.DependencyInjection.ServiceDescriptor>' 
MuWapp.DNX 4.5.1    C:\MuWapp\Startup.cs    54  Active

【问题讨论】:

  • 我认为所有的 nuget 包版本都应该匹配(你有 beta-8 和 rc-1 混合)。
  • autofac 没有 rc-1,所以如果你是对的,那么 autofac 还不支持 rc1?这意味着 rc 发生了重大变化,这有点不对劲!

标签: c# autofac


【解决方案1】:

对于 RC1,您需要使用 Autofac.Extensions.DependencyInjection 包。

https://www.nuget.org/packages/Autofac.Extensions.DependencyInjection/

我们重命名了我们的包以与 Microsoft 重命名为 Microsoft.Extensions.DependencyInjection 保持一致。它一直是支持早期 DNX 版本的移动目标。

【讨论】:

    【解决方案2】:

    正如我在评论中提到的,您应该在 project.json 中使用所有包的兼容版本。我在他们的页面上看到:https://github.com/autofac/Autofac/releases 他们已经发布了 RC1 的版本,但是 RC1 没有 Autofac.Framework.DependencyInjection,所以如果你需要这个包,你将无法运行它。

    我认为你应该在开发过程中使用内置的依赖注入,直到有 RTM 版本并且所有第三方包都将变得稳定。

    内置 DI 具有将类注入控制器、属性和属性的功能,因此除非您使用一些需要 autofac 的高级场景,否则您应该坚持使用 asp.net 5 DI。

    【讨论】:

    • 谢谢 - 显然我需要 RC1 依赖注入才能将 autofac 与 ASP.NET vNext DI 一起使用。因此,我将不得不等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2016-10-06
    • 2011-11-30
    • 2014-02-19
    相关资源
    最近更新 更多