【问题标题】:WebApi / AutoFac and an iDependencyResolver errorWebApi / AutoFac 和 iDependencyResolver 错误
【发布时间】:2012-10-08 19:11:40
【问题描述】:

我有一个 DDD 分层应用程序,因此它包含一个 Asp.Net MVC 4 项目和一个 WebApi 项目(表示层中有两个项目)。

使用 Asp.Net MVC 4 添加 Autofac = 好的 使用 Asp.Net WebApi 添加 Autofac = 不行

这是我的asp.net web api中的global.asax.cs

var configuration = GlobalConfiguration.Configuration;
var builder = new ContainerBuilder();

// Configure the container with the integration implementations.
// builder.ConfigureWebApi(configuration);
builder.RegisterWebApiFilterProvider(configuration);

// Register API controllers using assembly scanning.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerLifetimeScope()
    .OnRelease(x => { ((IUnitOfWork)x).Commit(); });
builder.RegisterType(typeof(DatabaseFactory)).As(typeof(IDatabaseFactory)).InstancePerLifetimeScope().AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(UserRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(SecurityService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces();
var container = builder.Build();

// Set the dependency resolver implementation.
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);

我看到的错误是: 无法从程序集“System.Web.Http,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”加载类型“System.Web.Http.Dependencies.IDependencyResolver”。 尝试重写部分代码3次,但似乎不起作用。

已经找到了一些博客的链接,但大部分都包含对builder.ConfigureWebApi(configuration); 的引用,并且在较新的版本中不存在。

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 你得到什么错误?我在您的帖子中没有看到它。
  • 是否有机会获得您的 IControllerFactory 实现,因为 Autofac 似乎没有附带一个?

标签: asp.net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

除了您的解析器之外,您还需要一个控制器工厂,我没有为 autofac 创建控制器工厂的经验(我的经验是使用 windsor),但它应该是直截了当的。你想像这样使用configuration.DependancyResolver

configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

一旦你创建了你的工厂,你就可以分配它:

ControllerBuilder.Current.SetControllerFactory(yourfactory);

【讨论】:

    【解决方案2】:

    看起来您使用的是 Web API 的预发布版本,因为在 RTW 版本中,依赖关系解析器是通过属性设置的:

    var resolver = new AutofacWebApiDependencyResolver(container);
    configuration.DependencyResolver = resolver;
    

    确保您是 Web API 的 RTW 版本和用于 Autofac 集成的最新 NuGet 包:

    Install-Package Autofac.WebApi

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多