首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Castle Windsor:在OnCreate、UsingFactoryMethod或DynamicParameters中重用解析的组件

Castle Windsor:在OnCreate、UsingFactoryMethod或DynamicParameters中重用解析的组件
EN

Stack Overflow用户
提问于 2010-05-01 03:30:21
回答 1查看 1.9K关注 0票数 0

我试图在一个已解析的组件作为依赖项返回给应用程序之前,对它执行一个操作。

例如,使用下面的图表:

代码语言:javascript
复制
public class Foo : IFoo { }

public class Bar {
  IFoo _foo;
  IBaz _baz;
  public Bar(IFoo foo, IBaz baz) {
    _foo = foo;
    _baz = baz;
  }
}

当我创建IFoo的实例时,我希望容器实例化Bar,并将已经解析的IFoo以及它所需的任何其他依赖项传递给它。所以当我打电话的时候:

代码语言:javascript
复制
var foo = container.Resolve<IFoo>();

容器应该会自动调用:

代码语言:javascript
复制
container.Resolve<Bar>(); // should pass foo and instantiate IBaz

我尝试过使用OnCreate、DynamicParameters和UsingFactoryMethod,但它们都有一个共同的问题,那就是它们都没有显式地引用组件: DynamicParameters是在IFoo实例化之前调用的。之后调用OnCreate,但委托不传递实例。UsingFactoryMethod没有帮助,因为我需要向TService和TComponent注册这些组件。

理想情况下,我希望注册是这样的:

代码语言:javascript
复制
container.Register<IFoo, Foo>((kernel, foo) => kernel.Resolve<Bar>(new { foo }));

请注意,IFoo和Bar是以瞬态生命方式注册的,这意味着已经解析的实例必须传递给Bar -它不能被“重新解析”。

这个是可能的吗?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-01 10:29:52

看起来这就是你想要的:

代码语言:javascript
复制
public interface IFoo {}
public class Foo : IFoo {}
public class Bar {
    public IFoo BarFoo { get; private set;}

    public Bar(IFoo foo) {
        BarFoo = foo;
    }

    public void DoSomething() {
        Console.WriteLine("Initializing");
    }
}

[Test]
public void Create() {
    var container = new WindsorContainer();
    var initialized = false;
    container.Register(Component.For<IFoo>().ImplementedBy<Foo>().LifeStyle.Transient
        .OnCreate((kernel, foo) => {
            var bar = kernel.Resolve<Bar>(new {foo});
            Assert.AreSame(foo, bar.BarFoo);
            bar.DoSomething();
            initialized = true;
        }));
    container.Register(Component.For<Bar>().LifeStyle.Transient);
    var f = container.Resolve<IFoo>();
    Assert.IsTrue(initialized);
}

它实际上几乎是this other question的复制品。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2747117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档