Класс обслуживания имеет общедоступное свойство, которое не разрешается

У меня небольшие проблемы с пониманием того, почему мой класс Manager имеет значение null в контексте обработки запроса с помощью этого примера метода POST в классе Service. Я зарегистрировал диспетчер и его зависимости, как в этом примере, и, похоже, он регистрируется нормально. Единственный способ, которым я могу заставить это работать, - это если я скажу свойству идти и разрешать Named через контейнер в ссылке apphost. Спасибо!

public static class TemplateContainer
{
  public const string DomainName = "Template";

  public static Funq.Container Configure(Funq.Container container)
  {

        container.Register<IUOWMongo<TemplateMongoContext>>(DomainName, c =>
             new UOWMongo<TemplateMongoContext>(
                  c.ResolveNamed<string>(Constants.NamedString)
                  )
             ).ReusedWithin(Funq.ReuseScope.Request);

        container.Register<IMongoTemplateRepository>(DomainName, c =>
             new MongoTemplateRepository<TemplateMongoContext>(
                        c.ResolveNamed<IUOWMongo<TemplateMongoContext>>(DomainName)
                  )
             ).ReusedWithin(Funq.ReuseScope.Request);

        container.Register<ITemplateDataManager>(DomainName, c =>
             new TemplateDataManager(c.ResolveNamed<IMongoTemplateRepository>(DomainName))
             ).ReusedWithin(Funq.ReuseScope.Default);

        return container;
  }
}

public class TemplateService : ServiceStack.ServiceInterface.Service
{
  public ITemplateDataManager Manager { get; set; }

  public GetTemplateResponse Post(GetTemplateRequest request)
  {
        var response = new GetTemplateResponse();
        **// Manager is null here!!!
        // Only way I can get it to work is if I do this:
        Manager = AppHostBase.Instance.Container.ResolveNamed<ITemplateDataManager>("Template");**

        return response;
  }
}

person melmack    schedule 05.09.2014    source источник


Ответы (1)


AutoWiring в Funq не рассматривает именованные зависимости. Вы можете изменить его, чтобы зарегистрировать как обычную зависимость:

container.Register<ITemplateDataManager>(c =>
     new TemplateDataManager(c.ResolveNamed<IMongoTemplateRepository>(DomainName))
 );
person mythz    schedule 06.09.2014