使用 FillAllPropertiesOfType 进行开放泛型的 StructureMap 属性设置器注入

问题描述 投票:0回答:1

我有以下课程:

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

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

    public ISession Session { get; set; }
}

我想使用属性注入来填充会话。这意味着从 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个回答
1
投票

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

示例:

public void PerformQuery<TResult>()
{
    var query = ObjectFactory.GetInstance<Query<TResult>>();
    ObjectFactory.BuildUp(query);
    return query.Execute();
}
© www.soinside.com 2019 - 2024. All rights reserved.