孩子我不知道调用这个父/子,但在这里,你走了,我也有类似的情况是这样的:解决家长/与温莎城堡
namespace ConsoleApplication1
{
using System.Diagnostics;
using System.Linq;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.Resolvers.SpecializedResolvers;
using Castle.Windsor;
class Program
{
static void Main(string[] args)
{
var container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
container.Register(
Component.For<Parent>().LifeStyle.Singleton,
Component.For<IChild>().ImplementedBy<Child1>().LifeStyle.Singleton);
var p = container.Resolve<Parent>();
// Fails...
Debug.Assert(p.Children.First().Parent == p, "Parent should be resolved");
}
}
class Parent
{
public IChild[] Children { get; set; }
}
interface IChild
{
Parent Parent { get; set; }
}
class Child1 : IChild
{
public Parent Parent { get; set; }
}
}
我CollectionResolver加入到容器中。 Parent和Child1(使用IChild服务)都在容器中注册为单例。每当我尝试解析Parent实例时,我都填充了我的Children数组,但该数组中的Child1实例的Parent为null。我期待的是将Child1的Parent属性设置为我正在尝试解决的父实例。我可以理解,父母尚未完全激活,但自从ctor运行后,Windsor无法注入此属性吗?有什么办法可以做到这一点吗?或者我应该手动运行一些代码来设置子对象的父母(这很不理想)?
在此先感谢!
很公平。尽管闻起来我会走这条路。 – huseyint 2011-04-27 11:59:11
我真的不知道温莎是否是您手边工作的正确工具。看起来你正在创建一个域对象图。让Windsor创建域实例通常不是一个好主意,通常有一些存储库提供它们。然后你会问温莎的存储库,而不是域实例。 – 2011-04-27 13:02:29
实际上,这里的Parent表示WPF屏幕的ViewModel,而Child表示可以在该屏幕上调用的Action,它们可视化为Button控件。我的ViewModel应该知道可用的动作来呈现它们,并且每个动作都应该知道它们正在与之交互的ViewModel。这似乎是使用依赖容器的好例子,因为我有一些内置的操作以及通过扩展提供的自定义操作。 – huseyint 2011-04-27 14:51:38