bsa*_*vio 3 c# asp.net-mvc dependency-injection autofac asp.net-web-api
我有一个MVC/WebApi应用程序.我开始使用Autofac来解决这个问题.
Autofac工作.但是,随机我会收到错误:
尝试创建"SomeController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.
当我清理解决方案并重建时.没有更多的错误.我以为这是我的Visual Studio实例(可能需要运行修复).但是,我只是尝试发布到IIS,我再次收到错误.
有没有人遇到过这个问题,能有人帮帮我吗?
这是一些代码细节:
我所有的注册都是在这样的模块中完成的:
public class CryptographyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<AesCryptographyService>()
.As<IAesCryptographyService>()
.InstancePerRequest();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用它来引导Autofac:
public static class Bootstrapper
{
public static void Run()
{
BootStrapAutofac();
}
private static void BootStrapAutofac()
{
var builder = new ContainerBuilder();
var localAssemblies = GetLocalAssemblies();
builder.RegisterApiControllers(localAssemblies);
builder.RegisterControllers(localAssemblies);
builder.RegisterAssemblyModules(localAssemblies);
//build container
var container = builder.Build();
var webApiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;
var mvcResolver = new AutofacDependencyResolver(container);
DependencyResolver.SetResolver(mvcResolver);
}
private static Assembly[] GetLocalAssemblies()
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName().Name.StartsWith("Loc"))
.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我有这样的问题.我的问题是我没有设置DependencyResolver.SetResolver();并GlobalConfiguration.Configuration.DependencyResolver在应用程序入口点(Global.asax,Application_Start).所以ASP.NET无法在我的控制器中解析我的依赖项,然后我得到了同样的异常.
在应用程序启动的第一时间设置依赖项解析器,解决了我的问题.
在您的情况下,正如您所说清理和重建解决方案的工作原理,可能问题是如何让程序集在Autofac中注册.尝试记录调用时正在注册的每个程序集,GetLocalAssemblies并查看是否正在注册具有控制器的程序集和具有依赖项的程序集.
| 归档时间: |
|
| 查看次数: |
8874 次 |
| 最近记录: |