2014-09-05 23 views
0

我有點困難,理解爲什麼我的管理器類在通過此示例POST方法在Service類中的請求處理的上下文中爲null。 我註冊了管理器,它的依賴關係就像這個例子,它似乎註冊很好。 只有通過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; 
    } 
} 

回答

1

Funq中的AutoWiring不查看命名的依賴關係。您可以將其更改爲正常相關性註冊:

container.Register<ITemplateDataManager>(c => 
    new TemplateDataManager(c.ResolveNamed<IMongoTemplateRepository>(DomainName)) 
); 
相關問題