0

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

用 Asp.Net MVC 4 添加 Autofac = ok 用 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,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”加载类型“System.Web.Http.Dependencies.IDependencyResolver”。尝试重写部分代码 3 次,但它似乎不起作用。

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

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

4

2 回答 2

1

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

configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

创建工厂后,您可以分配它:

ControllerBuilder.Current.SetControllerFactory(yourfactory);
于 2012-10-08T19:45:29.253 回答
0

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

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

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

Install-Package Autofac.WebApi

于 2012-10-09T12:22:00.863 回答