이 링크 http://compositewpf.codeplex.com/discussions/250892에서 설명한대로 도구 모음에 대한 사용자 지정 지역 어댑터를 구현했습니다. 이 오류가 발생합니다 : 'ToolBarRegionAdapter'0 인수를 사용하는 생성자가 포함되어 있지 않습니다. 여기 내 코드 : 내 부트 스트 래퍼에() 메소드를 ConfigureRegionAdapterMappings를 오버라이드 한사용자 지정 영역 어댑터 (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;
}
};
}
}
는 (내 부트 스트 래퍼는 MefBootstrapper에서 상속). 여기에 코드 : 'ToolBarRegionAdapter는'0 인수를 취하는 생성자가 포함되어 있지 않습니다
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
regionAdapterMappings.RegisterMapping(typeof(ToolBar), new ToolBarRegionAdapter());
return regionAdapterMappings;
}
나는이 오류가 컴파일
. 실제로 사실입니다. 생성자는 IRegionBehaviorFactory를 사용하지만 코드에 해당 객체가 없습니다. 그러나 본 예제에서 영역 어댑터는 아무런 논쟁없이 인스턴스화됩니다. 그 이유는 무엇입니까? 감사! 생성자 주입은 항상 바람직하지만 그것이 불가능 할 때 제공 한 링크에 도시 된 바와 같이
감사 @Haukinger이어야합니다. 그것은 효과가 있었다. 그러나 나는 약간의 비트와 peaces를 여기에서 이해하지 않는다 (미안, 나는 프리즘에 아주 새로워졌다). ** 질문 1 ** : ServiceLocator는 어떤 종류의 객체의 인스턴스를 얻을 수있는 "상자"입니까? ; ** 질문 2 ** : "생성자 삽입"이란 무엇입니까? ** 질문 3 ** : "왜 생성자 주입이 가능하지 않습니까? – chincheta73
광고 1) kind-of, yes, prism은 사용 된 컨테이너에 액세스하기 위해 공통 서비스 로케이터를 구성하므로 'Container.Resolve '. ad 2) 생성자 삽입은 생성자 매개 변수로서 의존성을 가지며 해석 할 때 컨테이너를 채우는 것을 의미합니다. ad 3) 생성자 주입은 컨테이너가 생성자를 호출 할 때만 가능합니다. 즉, 인스턴스가' Container.Resolve' – Haukinger
참고 : ServcieLocator를 사용하지 마십시오. 컨테이너를 직접 사용하십시오. http://brianlagunas.com/create-a-custom-prism-regionadapter/ –