2009-08-15 23 views
5

StructureMap Registy kurucusu içinde bir tür örneğini (farklı bir Kayıt Defterinde kayıtlı) nasıl edinebilirim? Ben şu kodu kullanmak istiyorum: IApplicationSettings, uygulama ayarlarının bir arabirimidir.StructureMap Registy yapıcısında nasıl örnek olabilirim?

public ApplicationServicesRegistry() 
    { 
     ForRequestedType<IApplicationSettings>().TheDefault.IsThis(
      new ConfigFileApplicationSettings()); 
    } 

Ve her iki kayıtları Önyükleyicisi kayıtlıdır: Bu arayüzü (şu anda ConfigFileApplicationSettings sınıfı) uygulanması beton türü bu gibi başka bir kayıt defterinde kayıtlı Ben bir örneğini elde etmeye çalışmak

 #region IBootstrapper Members 

    public void BootstrapStructureMap() 
    { 
     ObjectFactory.Initialize(InitalizeStructureMapContainer); 
    } 

    #endregion 

    #region Private properties 

    private static bool HasStarted { get; set; } 

    #endregion 

    #region Private methods 

    private void InitalizeStructureMapContainer(IInitializationExpression x) 
    { 
     x.IgnoreStructureMapConfig = true; 
     x.AddRegistry<ViewModelRegistry>(); 
     x.AddRegistry<ApplicationServicesRegistry>(); 
     x.AddRegistry<RepositoriesRegistry>(); 
     x.AddRegistry<DataOperationsRegistry>(); 
    } 

    #endregion 

Kayıt defteri kurucusunda IApplicationRegisty Bir hata var (tabii ki). StructureMap'i nasıl doğru şekilde kullanacağımı tamamlamıyorum. Bu işi farklı bir şekilde yapmalı mıyım? Ama yine de bir kayıt defteri kurucusunda kayıtlı bir tür erken örneğini alabilir miyim?

cevap

7

Bugün aynı sorunla karşılaştım. Jeremy Miller'ın yanıtı (ilişki yok :)), Yapı Zamanının yapılandırma zamanında örnek oluşturmak için ayarlanmadığıdır.

Önerdiğim ve kullandığım geçici çözüm, yalnızca ayarlar için bir kapsayıcı oluşturmaktı. İşte benim çözümüm.

public class SettingsRegistry : Registry 
{ 
    public SettingsRegistry() 
    { 
     ForRequestedType<ISettingsProvider>().TheDefault.Is.OfConcreteType<AppSettingsProvider>(); 

     Scan(s => 
     { 
      s.TheCallingAssembly(); 
      s.With<SettingsScanner>(); 
     }); 
    } 
} 

public class RegistryNeedingSettings : Registry 
{ 
    public RegistryNeedingSettings() 
    { 
     var settingsContainer = new Container(new SettingsRegistry()); 
     var coreSettings = settingsContainer.GetInstance<CoreSettings>(); 

     //configuration needing access to the settings. 
    } 
} 

Ben kendi kayıt içine her şeyi ayarları taşındı ve ayarları kayıt bağımlı kayıt önce yapılandırılmış alır emin oldum.

Bu yardımcı olur umarım.

İlgili konular