2012-03-06 44 views
1

我有下面的類:StructureMap屬性setter注射開放式泛型使用FillAllPropertiesOfType

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

任何人都可以建議我做錯了

感謝

戴夫

回答

1

您需要調用IContainer.BuildUp()方法來初始化對象的屬性。

實施例:

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

您好讀取文檔。似乎BuildUp用於設置已經創建的對象的屬性。就像你的例子..我想自動設置屬性,因爲它描述在這裏:http://structuremap.net/structuremap/ConstructorAndSetterInjection.htm#section7 – CraftyFella 2012-03-07 08:31:15

+0

傑伊,你的答案是100%正確的。原來我正在創建查詢。即通過傳遞StructureMap ..所以它如何設置ISession。爲此,BuildUp是正確的解決方案。謝謝 :) – CraftyFella 2012-03-07 08:56:09

相關問題