2012-03-06 1 views
1

У меня есть следующий класс:StructureMap инъекции свойство сеттер с открытым общим использованием FillAllPropertiesOfType

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

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

    public ISession Session { get; set; } 
} 

Я хотел использовать инъекции свойство для заполнения сессии. Это означало бы, что любое наследование от Query сможет запросить использование сеанса.

В любом случае .. Это всегда пустой :(

У меня есть следующий код 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>()); 
       }); 
    } 
} 

Может кто-нибудь предложить, что я делаю неправильно

Благодарности

Dave

ответ

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

+0

Джей, ваш ответ был на 100% правильным. Оказывается, я обновил запрос. То есть Пропуская StructureMap .. так как он может установить ISession. Для этого правильное решение - BuildUp. Благодаря :) – CraftyFella

 Смежные вопросы

  • Нет связанных вопросов^_^