我有一个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);
的引用,并且在较新版本中不存在。
关于如何解决这个问题的任何想法?
答案 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