我遇到了一个问题,如果我在项目中的任何地方调用ServiceLocator.Current.GetInstance(type)
,它会导致整个项目中的UserControl在Visual Studio中的设计时停止在其他控件中实例化。但是,这些控件在运行时工作正常。
通过使用以下3个类创建一个简单的WpfApplication可以重现它。 第一次构建将成功,设计师将显示正常。但是,如果 rebuild ,它会抛出错误,设计器会停止在其他控件中实例化UserControls。由于这种行为,它似乎是一个Visual Studio错误,但我不确定。
取消注释时,ServiceLocator的#GetInstance(Type type)
函数会在错误列表Cannot locate resource 'controls/test.xaml
中导致错误,并且设计器会显示Test UserControl应该出现的错误Cannot create an instance of "Test"
。评论时,没有错误。
测试xaml类。
<UserControl x:Class="XamlTest.Controls.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid>
<Label Content="Test"/>
</Grid>
</UserControl>
MyView xaml类。 (使用测试)
<UserControl x:Class="XamlTest.Views.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mycontrols="clr-namespace:XamlTest.Controls"
mc:Ignorable="d">
<Grid>
<mycontrols:Test/>
</Grid>
</UserControl>
与使用ServiceLocator.Current.GetInstance(type);
。
using Microsoft.Practices.ServiceLocation;
namespace XamlTest.SomeClasses
{
class SomeClass
{
public void SomeFunction()
{
// Causes Test xaml class to not instantiate at design time within MyView.
// Does not matter what parameters you give the function.
// Notice this class isn't even associated with any other class,
// and is never called, but it still causes problems.
ServiceLocator.Current.GetInstance(null);
}
}
}