У меня есть экземпляр IValueConverter в проекте Silverlight 5, который преобразует пользовательские данные в разные цвета. Мне нужно прочитать фактические значения цвета из базы данных (так как они могут быть отредактированы пользователем).Использование Unity для ввода объектов в экземпляр IValueConverter
Поскольку Silverlight использует асинхронные вызовы для загрузки данных через Entity Framework из базы данных, я создал простой репозиторий, в котором хранятся значения из db.
Интерфейс:
public interface IConfigurationsRepository
{
string this[string key] { get; }
}
Реализация:
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];
}
}
}
Теперь я хотел бы использовать Unity, чтобы ввести этот экземпляр моего репозитория в экземпляр IValueConverter ...
App .xaml.cs:
private void RegisterTypes()
{
_container = new UnityContainer();
IConfigurationsRepository configurationsRepository = new ConfigurationRepository();
_container.RegisterInstance<IConfigurationsRepository>(configurationsRepository);
}
IValueConverter:
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();
}
}
Проблема заключается в том, что я не получаю тот же Unity-контейнера в случае преобразователя (то есть. репозиторий не зарегистрирован).
Как экземпляр вашего преобразователя создан? Вы устанавливаете его в XAML? – Jehof
Да. Я установил преобразователь значений в привязку XAML-объекта (Foreground of TextBox). – froeschli