SystemWrapper 和 Castle Windsor 的问题

Issue with SystemWrapper and Castle Windsor

我一直在尝试使用 SystemWrapper 来模拟文件 IO 和我正在为其编写自己的包装器的其他标准 MS 方法。但是,我发现我正在使用的 IOC Castle Windsor 存在问题。

我专门使用实现它的 IDirectoryInfo 和 DirectoryInfoWrap。我已经像其他界面一样注册了:

container.Register(Component.For<IDirectoryInfo, DirectoryInfoWrap>());

我什至这样做过:

container.Register(Component.For<IDirectoryInfo>().ImplementedBy<DirectoryInfoWrap>());

但是当我 运行 我的应用程序时,我得到了这个:

Can't create component 'SystemWrapper.IO.DirectoryInfoWrap' as it has dependencies to be satisfied.

'SystemWrapper.IO.DirectoryInfoWrap' is waiting for the following dependencies: - Service 'System.IO.DirectoryInfo' which was not registered. - Parameter 'path' which was not provided. Did you forget to set the dependency?

这对我来说毫无意义。为什么它认为常规的 DIrectoryInfo 是需要注册的 "service"?为了咯咯地笑,我尝试用 DirectoryInfoWrap 注册 DirectoryInfo,但这给了我这个:

Types System.IO.DirectoryInfo and SystemWrapper.IO.DirectoryInfoWrap are unrelated. That is not allowed. Are you sure you want to make them both services on the same component? Parameter name: x

如果有人以前解决过这个问题,请告诉我。如果不行那我就继续手写wrapper

谢谢

所以答案很简单。 System Wrap 构造函数需要一个 DirectoryInfo 参数。我从来没有用 Windsor 处理过构造函数参数。经过研究,这是解决方案:

Component.For<IDirectoryInfo, DirectoryInfoWrap>().DependsOn(Dependency.OnValue("directoryInfo", directoryInfo)