Dependency injection 使用Unity将VM注入WPF中的自定义控件
我正在构建一个基于WPF的应用程序。我使用Unity在我的应用程序中注入所有不同的依赖项(在App.xaml.cs中定义)。 在我的主应用程序窗口中,我有一个非常复杂的自定义控件,该控件派生自控件(is中集成了大约10个控件)。 我希望在不将VM耦合到应用程序中的任何其他对象的情况下将VM注入此自定义控件(当然除了App.xaml.cs) 在我的应用程序中,对任何WPF窗口的注入都能很好地工作,但当我尝试注入自定义控件时,我面临着不同的情况: 1.以防我使用 container.RegisterInstance(container.Resolve) DI创建MyCustomControl的虚拟实例并注入VM(使用[Dependency]属性)。但是,当我在XAML中使用此特定实例时,不会使用它: 在这种情况下,它会初始化一个新的MyCustomControl,忽略任何依赖项Dependency injection 使用Unity将VM注入WPF中的自定义控件,dependency-injection,binding,custom-controls,unity-container,Dependency Injection,Binding,Custom Controls,Unity Container,我正在构建一个基于WPF的应用程序。我使用Unity在我的应用程序中注入所有不同的依赖项(在App.xaml.cs中定义)。 在我的主应用程序窗口中,我有一个非常复杂的自定义控件,该控件派生自控件(is中集成了大约10个控件)。 我希望在不将VM耦合到应用程序中的任何其他对象的情况下将VM注入此自定义控件(当然除了App.xaml.cs) 在我的应用程序中,对任何WPF窗口的注入都能很好地工作,但当我尝试注入自定义控件时,我面临着不同的情况: 1.以防我使用 container.Register
我意识到我可能做错了什么(不仅仅是技术上的),我真的在努力避免耦合此控件(这显然会解决问题)。我不知道这是否是最佳解决方案,在寻找其他选项时发现了您的问题,但是,唉,这是我至少用于启动和运行的方法 我创建了一个基本的UnityControl类,它是Control的子类。在构造函数中,我使用ServiceLocator获取对容器的引用。然后调用build方法来解析派生控件类上的任何依赖项。任何依赖项都实现为用DependencyAttribute标记的读/写属性 以下是UnityControl的外观:
public abstract class UnityControl : Control
{
protected UnityControl() : base()
{
Container = ServiceLocator.Current.GetInstance<IUnityContainer>();
Container.BuildUp(this.GetType(), this);
}
protected IUnityContainer Container { get; private set; }
}
公共抽象类UnityControl:Control
{
受保护的UnityControl():base()
{
Container=ServiceLocator.Current.GetInstance();
Container.building(this.GetType(),this);
}
受保护的IUnityContainer容器{get;private set;}
}