Comment puis-je obtenir une instance de type (enregistré dans un registre différent) dans le constructeur de StructureMap Registy? Je souhaite utiliser un tel code:Comment puis-je obtenir une instance dans le constructeur StructureMap Registy?
public RepositoriesRegistry()
{
IApplicationSettings lApplicationSettings =
ObjectFactory.GetInstance<IApplicationSettings>();
Debug.Assert(lApplicationSettings != null);
const string cSupportedDevicesConnectionString =
"metadata=res://*/Models.SupportedDevices.Database.SupportedDevicesModel.csdl|res://*/Models.SupportedDevices.Database.SupportedDevicesModel.ssdl|res://*/Models.SupportedDevices.Database.SupportedDevicesModel.msl;provider=System.Data.SqlClient;provider connection string=\"{0}\"";
string lSupportedDevicesConnectionString =
string.Format(cSupportedDevicesConnectionString, lDatabaseConnectionString);
SupportedDevicesEntities lSupportedDevicesEntities =
new SupportedDevicesEntities(lSupportedDevicesConnectionString);
ForRequestedType<SupportedDevicesEntities>().TheDefault.IsThis(
lSupportedDevicesEntities);
ForRequestedType<ISupportedDevicesRepository>().TheDefault.IsThis(
new SupportedDevicesRepository(lSupportedDevicesEntities));
}
IApplicationSettings est une interface pour les paramètres d'application. Le type de béton mise en œuvre de cette interface (actuellement de classe ConfigFileApplicationSettings) est inscrit dans un autre registre comme celui-ci:
public ApplicationServicesRegistry()
{
ForRequestedType<IApplicationSettings>().TheDefault.IsThis(
new ConfigFileApplicationSettings());
}
Et les deux registres sont inscrits dans le programme d'amorçage:
#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
Lorsque je tente d'obtenir une instance de IApplicationRegisty dans le constructeur de registre J'ai une erreur (bien sûr). Je ne comprends pas complètement comment utiliser StructureMap de la bonne façon. Peut-être que je devrais faire la chose d'une manière différente. Mais de toute façon puis-je obtenir une instance d'un type déjà enregistré dans un constructeur de registre?