【问题标题】:Castle Windsor IoC inject Property into ConstructorCastle Windsor IoC 将属性注入构造函数
【发布时间】:2013-06-25 18:01:14
【问题描述】:

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

例如

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);
    }
}

我一直在温莎城堡的文档中四处寻找,但我一定是在寻找错误的东西或遗漏了一些东西,因为我确定它在那里,只是找不到。

我应该如何配置 Castle Windsor 安装程序,以便将 SessionManager.CurrentSession 注入到 Request 类的构造函数中? (参考正确的温莎文档或示例也完全可以)

【问题讨论】:

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


    【解决方案1】:
    container.Register(Component.For<ISession>()
        .UsingFactoryMethod(() => container
            .Resolve<ISessionManager>().CurrentSession)
        .LifeStyle.Transient);
    

    【讨论】:

    • 我将 IService 更改为 ISession,一切都很好。谢谢!就我为此引用的文档而言,我完全走错了路,但现在我已经理顺了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多