이 내용을 이해할 수 없습니다. Unity 생성자 종속성 주입을 사용하는 MVVM 패턴을 사용하는 WPF 응용 프로그램이 있습니다. 이 응용 프로그램에서는 사용자 지정 컨트롤을 사용합니다. 모든 것이 처음에는 잘되었습니다. 메인 윈도우에 컨트롤을 추가했는데 VS 디자이너에서 잘 보였습니다. 그런 다음 컨트롤이 유용하게 사용할 수 있도록하고 싶었습니다. 이렇게하려면 데이터 공급자가 필요했습니다. 나는 그것을 제공하는 가장 좋은 방법은 공급자를 생성자에 종속물로 추가하는 것이라고 결론을 내렸다.VS 디자이너에서 생성자 종속성이로드되지 않는 사용자 지정 컨트롤
모두가 남쪽으로갔습니다. 프로그램이 예상대로 실행되지만 VS 디자이너는 컨트롤을 인스턴스화 할 수 없습니다. 내 딜레마를 설명하기 위해 간단한 애플리케이션을 만들었습니다. 뒤에
MainWindow를 코드 :
using System.Windows;
using System.Windows.Controls;
using Microsoft.Practices.Unity;
namespace DependencyInjectionDesigner
{
public interface IDependency { }
class Dependency : IDependency { }
class DependentControl : Control
{
public DependentControl()
: this(App.Unity.Resolve<IDependency>()) { }
public DependentControl(IDependency dependency) { }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
MainWindow를 XAML :
<Window x:Class="DependencyInjectionDesigner.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DependencyInjectionDesigner"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type local:DependentControl}">
<Setter Property="Margin" Value="30"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:DependentControl}">
<Border BorderBrush="Green" Background="Gainsboro"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<local:DependentControl/>
</Grid>
</Window>
뒤에
앱 코드 :
using System.Windows;
using Microsoft.Practices.Unity;
namespace DependencyInjectionDesigner
{
public partial class App : Application
{
public static IUnityContainer Unity { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
if (Unity != null) return;
Unity = new UnityContainer();
Unity.RegisterType<IDependency, Dependency>(
new ContainerControlledLifetimeManager());
}
}
}
나는 문제가 VS 디자이너가 모르는 것을 생각 컨트롤을 새로 만들기 전에 IDependency 유형을 등록하십시오. 나 맞아? 이 주변에 방법이 있습니까?
VS 2010 Ultimate 및 .Net 4.0을 사용하고 있습니다.
나는 내 질문에 답하는 것을 귀찮게 한 유일한 사람이기 때문에 대답을 표시하고 있습니다. 결국, 컨트롤의 의존성에 대한 속성 주입을 사용하기로 결정했습니다. 이는 정상적으로 작동하는 것 같습니다. 유니티를 사용하도록 설계자를 구성하는 고유 한 방법이 있어야한다고 생각되지만 어쩌면 그럴 수도 있습니다. – gregsdennis
나는 이것에 대해서도 생각하고있다. 현재 WinRT Xaml에서 작업 중이며 휴대용 라이브러리에 있어야하는 몇 가지 사용자 지정 컨트롤이 있습니다. 즉, 장치 별 DLL에 의존해서는 안됩니다. 이제 내 컨트롤 중 일부는 클립 보드와 같은 장치 특정 클래스를 다룹니다. 그래서 맞춤 텍스트 상자와 같은 일부 맞춤 컨트롤에서 DI를 수행해야합니다. 이걸 가진 행운이야? – Lance