【问题标题】:StructureMap property setter injection with open generic using FillAllPropertiesOfType使用 FillAllPropertiesOfType 的开放泛型的 StructureMap 属性设置器注入
【发布时间】:2012-03-06 17:52:28
【问题描述】:

我有以下课程:

public abstract class Query<TResult>
{
    protected abstract TResult Result();

    public TResult Execute()
    {
        return Result();
    }

    public ISession Session { get; set; }
}

我想使用属性注入来填充 Session。这意味着任何从 Query 继承的东西都可以使用 Session 进行查询。

无论如何..它总是空的:(

我有以下 StructureMap 注册表代码:

public class MyStructureMapRegistry : Registry
{
    public MiStructureMapRegistry()
    {
        Scan(scanner =>
                 {
                    scanner.TheCallingAssembly();
                    scanner.WithDefaultConventions();
                    For<ISession>().HttpContextScoped().Use(x => x.GetInstance<ISessionFactory>().OpenSession());
                    FillAllPropertiesOfType<ISession>().Use(x => x.GetInstance<ISession>());
                 });
    }
}

谁能建议我做错了什么?

谢谢

戴夫

【问题讨论】:

    标签: structuremap property-injection


    【解决方案1】:

    您需要调用 IContainer.BuildUp() 方法来初始化对象的属性。

    例子:

    public void PerformQuery<TResult>()
    {
        var query = ObjectFactory.GetInstance<Query<TResult>>();
        ObjectFactory.BuildUp(query);
        return query.Execute();
    }
    

    【讨论】:

    • 您好,阅读文档。似乎 BuildUp 用于设置已创建对象的属性。就像在您的示例中一样。我想自动设置属性,如此处所述:structuremap.net/structuremap/…
    • Jay,你的答案是 100% 正确的。原来我正在更新查询。 IE。通过传递 StructureMap.. 那么它如何设置 ISession。 BuildUp 因此是正确的解决方案。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多