我有一個Silverlight 5項目中的IValueConverter實例,它將自定義數據轉換爲不同的顏色。我需要從數據庫中讀取實際的顏色值(因爲這些可以由用戶編輯)。使用Unity將對象注入到IValueConverter實例中
由於Silverlight使用異步調用通過實體框架從數據庫加載數據,因此我創建了一個簡單的存儲庫,該存儲庫包含來自數據庫的值。
接口:
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];
}
}
}
現在我想用統一注入我的倉庫到的IValueConverter實例的這種情況下...
應用.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();
}
}
的問題是,我沒有在轉換器實例(即獲得相同的統一容器。存儲庫未註冊)。
如何您的轉換器的情況下產生的?你在XAML中設置了它嗎? – Jehof 2012-04-23 10:34:00
是的。我將值轉換器設置爲XAML對象(TextBox的前景)的綁定。 – froeschli 2012-04-23 12:00:43