Я реализовал пользовательский адаптер области для ToolBar, как описано в этой ссылке http://compositewpf.codeplex.com/discussions/250892. Я получаю эту ошибку: «ToolBarRegionAdapter» не содержит конструктор, который принимает 0 аргументов. Вот мой код:Адаптер пользовательского региона (PRISM)
public class ToolBarRegionAdapter : RegionAdapterBase<ToolBar>
{
public ToolBarRegionAdapter(IRegionBehaviorFactory behaviorFactory)
: base(behaviorFactory)
{
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
protected override void Adapt(IRegion region, ToolBar regionTarget)
{
region.Views.CollectionChanged += (sender, e) =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (FrameworkElement element in e.NewItems)
{
regionTarget.Items.Add(element);
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (UIElement elementLoopVariable in e.OldItems)
{
var element = elementLoopVariable;
if (regionTarget.Items.Contains(element))
{
regionTarget.Items.Remove(element);
}
}
break;
}
};
}
}
Я перекрытая в ConfigureRegionAdapterMappings() метод в моем загрузчике (мой Bootstrapper наследует от MefBootstrapper). Вот код:
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
regionAdapterMappings.RegisterMapping(typeof(ToolBar), new ToolBarRegionAdapter());
return regionAdapterMappings;
}
Когда я компилирую, я получаю эту ошибку: «ToolBarRegionAdapter» не содержит конструктор, который принимает 0 аргументов. Что на самом деле верно, contructor принимает IRegionBehaviorFactory, но у меня нет этого объекта в моем коде. Но в примерах, которые я видел, адаптер области создается без каких-либо аргументов. Любая идея почему? Благодаря!
Благодаря @Haukinger. Это сработало. Однако я не понимаю здесь некоторых бит и моментов (извините, я довольно новичок в Prism). ** Вопрос 1 **: ServiceLocator - это «поле», где вы можете получить экземпляры каких объектов? ; ** Вопрос 2 **: Что такое «инъекция конструктора» ?; и ** Вопрос 3 **: «Почему инъекция конструктора невозможна в моем случае? – chincheta73
ad 1) вид, да, призму настраивает общий сервисный локатор для доступа к используемому контейнеру, так что это то же самое, что« Container.Resolve '. ad 2) средство впрыска конструктора, имеющее зависимости как параметры конструктора и заполняющий их контейнер при разрешении. ad 3) впрыск конструктора возможен только, если конструктор вызывается контейнером, то есть, если экземпляр создается с помощью' Container.Resolve' – Haukinger
FYI, не используйте ServcieLocator, просто используйте контейнер напрямую. Http://brianlagunas.com/create-a-custom-prism-regionadapter/ –