1

我创建了一个WebApi项目并将Castle Windsor配置为DI容器。Castle Windsor无法解析WebApi中的类型

当我在我的WebServer上部署WebApi时,一切正常,直到通过单击重新启动按钮或执行iisreset命令重新启动Web服务器(我正在使用IIS)。在那之后,我总是有以下错误:

No component for supporting the service XXX.ICategoryDomainService was found

当我运行在调试模式下项目中Visual Studio,这个问题似乎随机发生。但是每次我做完整的Clean/Rebuild之后,它至少会工作一次。停止/多次启动项目(始终在Visual Studio之内)将问题带回。当异常升高时,我检查了集装箱的状态,一切似乎是确定

Castle Windsor Configuration

更新:

好吧,我终于设法找到问题了(但我目前没有适当的解决方案)。
我在自动扫描所有类型的我目前的项目,并试图然后注册的某些类型的框架DLL做了登记...

在一个框架库:

IEnumerable<IInstaller> installers = this.Container.ResolveAll<IInstaller>(); 
foreach (IInstaller installer in installers) 
{ 
    installer.Install(this.Container); 
} 

这是IInstaller是如何注册:

this.Container.Register(Classes 
    .From(ApplicationDomain.Current.ConcreteClasses) 
    .BasedOn<IInstaller>() 
    .WithServiceAllInterfaces() 
    .LifestylePerWebRequest()); 

一个小的扩展方法(总是框架)

public static void RegisterAllServices(this IWindsorContainer container, 
    IEnumerable<Type> types) 
{ 
    container.Register(Classes 
     .From(types) 
     .BasedOn<IService>() 
     .WithServiceAllInterfaces() 
     .LifestyleTransient()); 
} 

一个安装在我的项目

public class BusinessInstaller : IInstaller 
{ 
    public void Install(IWindsorContainer container) 
    { 
     Type[] types = typeof(BusinessInstaller).Assembly.GetTypes(); 
     container.RegisterAllServices(types); 
    } 
} 

这是非常weired,但这是我可以观察到:该扩展方法RegisterAllServices当我做了充分的重建,才会调用。之后,在调试模式下,我可以看到调试器只是跨过一个永远不会进入的方法,但是这些类型无论如何都被注册(但可能是以一种错误的方式,因为Windsor无法解决它们!)。

临时解决方法是在BusinessInstaller中注册我所有的类。然后,它的作品...但它不是最优的,它会更好,如果一切都可以自动注册...

+0

你的注册是怎样的? “IDependecyResolver”与城堡相连吗? –

+0

查看我的更新... – Bidou

+0

我没有看到任何特别的东西。然而,我问自己是否有方法可以重新初始化'Container.Current' ....在我以前的工作中,我是用'WebApi'配置城堡的人,我相信我错过了一些东西......我需要找到我的POC,当我找到它时我会上传它...还有一件事,我想你应该上传'ICategoryDomainService'的注册。 –

回答

1

我认为你的问题在于线 ApplicationDomain.Current.ConcreteClasses

简单了结从类型如果组件被重新引用但未在代码中使用,则应用程序域不可靠。为此修补程序将键入明确引用您的包含安装组件的自举代码,如:

var t = typeof(BusinessInstaller).Assembly 

类似问题请参见本post

+0

Holy废话!我搜查了那么多小时是什么问题......我不明白为什么不提出明确的例外......谢谢! – Bidou

相关问题