Dependency injection iisreset后Unity注册失败

Dependency injection iisreset后Unity注册失败,dependency-injection,unity-container,asp.net-web-api,Dependency Injection,Unity Container,Asp.net Web Api,我正在注册一堆这样的依赖项 container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default, overwriteExistingMappings: true); 这可以很好地进行注册,并且正确配置了web api端点。 如果我做了iisreset或者只是等待一点,那么事情就会失败 错误消息没有太大帮助 "exceptionMessage

我正在注册一堆这样的依赖项

container.RegisterTypes(AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default,
overwriteExistingMappings: true);
这可以很好地进行注册,并且正确配置了web api端点。 如果我做了
iisreset
或者只是等待一点,那么事情就会失败

错误消息没有太大帮助

"exceptionMessage": "An error occurred when trying to create a controller of type 'ApiController'. Make sure that the controller has a parameterless public constructor.",
当然,控制器没有,也不应该有

我不知道发生了什么事。。。但是如果我显式地注册依赖项

 container.RegisterType<IDoAThing, Domain.Things.DoAThing>(new HierarchicalLifetimeManager());
container.RegisterType(新的层次结构CallifetimeManager());
然后一切都开始了


如何让“按约定”注册继续工作?

看起来在
iisreset
之后,当Unity注册开始时,程序集尚未加载到应用程序域中

由于您使用的是helper方法
AllClasses.FromLoadedAssemblies()
,因此它不会在尚未加载的程序集中注册类

尝试使用获取引用的程序集,这将获得bin文件夹中的程序集列表。然后使用这些程序集和
AllClasses.fromsassemblies
helper方法执行Unity注册

.RegisterTypes(
    AllClasses.FromAssemblies(
             BuildManager.GetReferencedAssemblies().Cast<Assembly>()),
    WithMappings.FromMatchingInterface,
    WithName.Default,
    overwriteExistingMappings: true);   

当Unity注册开始时,在IIS设置之后,可能程序集尚未加载到应用程序域中。尝试使用方法获取引用的程序集,以获取bin文件夹中的程序集列表,并将此集合传递给AllClasses.FromAssemblys助手方法。最糟糕的情况是,您可以使用每个程序集中的已知类,然后在这些程序集中注册类。如果程序集尚未加载到应用程序域中,则会出现类似问题我还没有让它工作,但这看起来很可能。如果你能回答这个问题,我会投你一票,让你获得更多的互联网积分!很高兴看到它有所帮助,希望它能帮助您解决问题。我怀疑这就是问题所在,因为我过去也有过类似的问题,但我昨天没有真正尝试过
.RegisterTypes(
    AllClasses.FromAssemblies(typeof(Foo).Assembly),
    WithMappings.FromMatchingInterface,
    WithName.Default,
    overwriteExistingMappings: true);