Castle Windsor IoC将Property注入构造函数

时间:2013-06-25 18:01:14

标签: c# dependency-injection inversion-of-control castle-windsor

我有一个具有会话属性的会话管理器类。我需要将它作为构造函数参数传递给另一个类。我该如何配置城堡温莎的安装程序?

e.g。

public interface ISessionManager
{
    ISession CurrentSession { get; set; }
}

public class SessionManager : ISessionManager
{
    private ISession _session;
    public ISession CurrentSession
    {
        get { return _session ?? (_session = NHibernateHelper.OpenSession()); }
        set { _session = value; }
    }
}

public interface IRequest
{
    TR Execute<TR>(IExecuteManager<TR> executeManager);
}

public class Request: IRequest
{
    private readonly ISession _session;

    public Request(ISession session)
    {
        _session = session;
    }
    public TR Execute<TR>(IExecuteManager<TR> executeManager)
    {
        return executeManager.Request(_session);
    }
}

我一直在城堡windsor docs,但我必须寻找错误的东西或遗漏一些东西,因为我确定它在那里,只是找不到它。

我应该如何配置城堡windsor安装程序,以便将SessionManager.CurrentSession注入到Request类的构造函数中? (参考修正windsor doc或示例也完全没问题)

1 个答案:

答案 0 :(得分:1)

container.Register(Component.For<ISession>()
    .UsingFactoryMethod(() => container
        .Resolve<ISessionManager>().CurrentSession)
    .LifeStyle.Transient);