При определении интерфейса для классов он помогает с внедрением зависимости. Ваши конфигурационные файлы Spring ничего не имеют об интерфейсах в них самих - Вы просто помещаете от имени класса.
, Но если Вы хотите ввести другой класс, который предлагает "эквивалентную" функциональность, с помощью интерфейса действительно, помогает.
, Например, говоря у Вас есть класс, который анализирует содержание веб-сайта, и Вы вводите его с Spring. Если классы, в которые Вы вводите его, знают, каков фактический класс, то для изменения его необходимо будет изменить много кода для использования различного реального класса. Но если бы Вы создали Analyzer
интерфейс, Вы могли бы так легко ввести свой оригинал DefaultAnalyzer
, как Вы могли копируемый DummyAnalyzer
или даже другой, который делает по существу то же самое, как PageByPageAnalyzer
или что-либо еще. Для использования одного из тех просто необходимо изменить имя класса, которое Вы вводите в своих файлах конфигурации Spring, вместо того, чтобы пройти Ваши классы меняющего кода.
мне потребовались приблизительно полтора с половиной, прежде чем я действительно начал видеть полноценность. Как большинство вещей (на языках предприятия), которые заканчивают тем, что были полезны, это походит на бессмысленное добавление работы сначала, пока Ваш проект не начинает расти, и затем Вы обнаруживаете сколько времени Вы сохраненный путем выполнения немного большего количества работы впереди.
1) Add the DrawingImage.xaml to the project and set its properties to 'BuildAction=Content' and 'Copy Always'. Or else you can dynamically load the XAML from outside since the logic I am going to explain will work for loose-xaml also.
2) Write a Converter to convert the XAML uri to UIELement, in your case it will be always DrawingImage
public class FileToUIElementConverter :IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
FileStream fileStream = new FileStream((string)parameter, FileMode.Open);
return XamlReader.Load(fileStream) as DrawingImage;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
3) Write the XAML as below
<Window.Resources>
<local:FileToUIElementConverter x:Key="uriToUIElementConverter"/>
</Window.Resources>
<Grid>
<Image Stretch="Fill" Source="{Binding Converter={StaticResource uriToUIElementConverter},ConverterParameter=ImageDrawing.xaml}"/>
</Grid>
Вы можете просто ссылаться на свою векторную графику как на StaticResources:
<Image Source="{StaticResource MyImage}" />
Сохраняйте изображения в ResourceDictionary как DrawImage. Expression Blend может помочь вам сгенерировать этот материал:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DrawingImage x:Key="MyImage">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M 333.393,... 100.327 Z "/>
<GeometryDrawing Brush="Black" Geometry="F1 M 202.309,... Z "/>
:
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</ResourceDictionary>
Вставьте ресурс XAML (DrawingImage) с типом «Ресурс». Тогда это не отдельный файл, и на него можно напрямую ссылаться через URI, как в вашем исходном примере - НО URI нетривиален. Вы должны выяснить синтаксис URI пакета Microsoft и использовать его.