2012-02-16 164 views
0

使用Castle.Windsor 2.5.4.32和Castle.Core 2.5.2.0。使用DynamicParameters时缺少依赖关系

我有一个组件需要一个字符串[]在它的ctor。字符串[] 来自“设置”类。我不想在设置类上依赖组件 ,因为它只需要字符串[]。所以我用 DynamicProperties从设置类中提取数据,这是从容器中提取的。至少, 这就是我认为会发生的事情。温莎不能解决我的 组件,因为它说有一个缺失的依赖项(字符串[])。

这是一个快速(MSTest)测试用例。这是我第一次使用 DynamicParameters,所以我可能做错了什么。有任何想法吗?

namespace WindsorTests.DynamicParametersTest 
{ 
     using Castle.MicroKernel.Registration; 
     using Castle.Windsor; 
     using Microsoft.VisualStudio.TestTools.UnitTesting; 

     [TestClass] 
     public class DPTest 
     { 
       [TestMethod] 
       public void TestMethod1() 
       { 
         var container = new WindsorContainer(); 
         container.Register(
           Component.For<ISettings>().ImplementedBy<Settings>(), 
           Component.For<Foo>().DynamicParameters((k, p) => 
                     { 
                var settings = k.Resolve<ISettings>(); 
                p["data"] = settings.MoreData; 
                     }) 
           ); 

         var bar = container.Resolve<Foo>(); 
       } 
     } 

     public interface ISettings 
     { 
       string[] MoreData { get; } 
     } 

     public class Settings : ISettings 
     { 
       public string[] MoreData 
       { 
         get { return new[] {"A", "B", "C"}; } 
       } 
     } 

     public class Foo 
     { 
       public Foo(string[] data) 
       { 
       } 
     } 
} 

回答

0

您的用法非常好。

我刚刚在Windsor 3上运行测试用例,并且它正在通过。所以我想这可能是2.5.x中的一个bug。

+0

实际上,它在2.5.x中也不是bug。上面的测试通过(哎呀!)。我在“解决”行上设置了一个断点,并在调试器中注意到有一个可能配置错误的组件。但是,DOES *的解析工作,它使用DynamicParameters来提供缺失的依赖关系。我还有别的事情,我无法弄清楚。我可能会把它发布到Castle-Users Google小组,并且由于我无法创建回购测试用例而查找我做错的意见/想法。 – PatrickSteele 2012-02-17 12:29:54

+0

好的,听起来不错。 – 2012-02-17 12:43:42