Verwenden von Unity zum Einfügen von Objekten in die IValueConverter-Instanz

Ich habe eine Instanz von IValueConverter in einem Silverlight 5-Projekt, das benutzerdefinierte Daten in verschiedene Farben konvertiert. Ich muss die tatsächlichen Farbwerte aus einer Datenbank lesen (da diese vom Benutzer bearbeitet werden können).

Da Silverlight asynchrone Aufrufe verwendet, um die Daten über Entity Framework aus der Datenbank zu laden, habe ich ein einfaches Repository erstellt, das die Werte aus der Datenbank enthält.

Die Schnittstelle:

<code>public interface IConfigurationsRepository
{
    string this[string key] { get; }
}
</code>

Die Umsetzung:

<code>public class ConfigurationRepository : IConfigurationsRepository
{
    private readonly TdTerminalService _service = new TdTerminalService();

    public ConfigurationRepository()
    {
        ConfigurationParameters = new Dictionary<string, string>();
        _service.LoadConfigurations().Completed += (s, e) =>
            {
                var loadOperation = (LoadOperation<Configuration>) s;
                foreach (Configuration configuration in loadOperation.Entities)
                {
                    ConfigurationParameters[configuration.ParameterKey] = configuration.ParameterValue;
                }
            };
    }

    private IDictionary<string, string> ConfigurationParameters { get; set; }

    public string this[string key]
    {
        get
        {
            return ConfigurationParameters[key];
        }
    }
}
</code>

Jetzt möchte ich Unity verwenden, um diese Instanz meines Repositorys in die IValueConverter-Instanz einzufügen ...

App.xaml.cs:

<code>private void RegisterTypes()
{
    _container = new UnityContainer();
    IConfigurationsRepository configurationsRepository = new ConfigurationRepository();
    _container.RegisterInstance<IConfigurationsRepository>(configurationsRepository);
}
</code>

IValueConverter:

<code>public class SomeValueToBrushConverter : IValueConverter
{
    [Dependency]
    private ConfigurationRepository ConfigurationRepository { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       switch ((SomeValue)value)
        {
            case SomeValue.Occupied:
                return new SolidColorBrush(ConfigurationRepository[OccupiedColor]);
            default:
                throw new ArgumentException();
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
</code>

Das Problem ist, dass ich nicht den gleichen Unity-Container in der Konverter-Instanz bekomme (dh das Repository ist nicht registriert).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage