WebApi / AutoFac和iDependencyResolver错误

时间:2012-10-08 19:11:40

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

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

使用Asp.Net MVC添加Autofac 4 =确定 使用Asp.Net添加Autofac WebApi =不行

这是我的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,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'加载类型'System.Web.Http.Dependencies.IDependencyResolver'。 尝试重写代码的一部分3次,但它似乎不起作用。

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

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

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

configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

创建工厂后,您可以指定它:

ControllerBuilder.Current.SetControllerFactory(yourfactory);

答案 1 :(得分:0)

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

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

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

Install-Package Autofac.WebApi