gpt4 book ai didi

c# - 无法创建 Prism 外壳

转载 作者:行者123 更新时间:2023-12-03 10:58:01 24 4
gpt4 key购买 nike

尝试创建Prism shell 时,出现以下异常:

An exception of type 'Microsoft.Practices.ServiceLocation.ActivationException' occurred in Microsoft.Practices.ServiceLocation.dll but was not handled in user code

Additional information: Activation error occurred while trying to get instance of type MainWindowViewModel, key ""



这是我的Bootstrapper类:
 public class Bootstrapper : UnityBootstrapper 
{
protected override DependencyObject CreateShell()
{
return Container.TryResolve<MainWindow>();

}

protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
}

应用类别:
 public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);

Bootstrapper bs = new Bootstrapper();
bs.Run();

bs.Container.RegisterType<ICustomer, Customer>();

}

}

和App.xaml:
<Application x:Class="MVVMPractice2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>

</Application.Resources>

</Application>

VIewModel类:
public class MainWindowViewModel : BindableBase
{
//instantiate the model
public ICustomer customer;

//property for button click command
public DelegateCommand UpdateCommand { get; set; }


//constructor to instantiate the buttons click command
public MainWindowViewModel(ICustomer customer)
{
this.customer = customer;


UpdateCommand = new DelegateCommand(() => {customer.CalculateTax();OnPropertyChanged(() => TaxAmount);}, customer.IsValid);

}


//this property maps customer name from model to the view
public string TxtCustomerName
{
get { return customer.CustomerName; }
set { customer.CustomerName = value; }
}

//this property maps amount from model to the view
public string TxtAmount
{
get { return Convert.ToString(customer.Amount); }
set { customer.Amount = Convert.ToDouble(value); }
}


//this property maps and transforms color from model to the view
public string LblAmountColor
{
get
{
if (customer.Amount > 2000)
{
return "Blue";
}
else if (customer.Amount > 1500)
{
return "Red";
}
return "Yellow";
}
}

//this property maps and transforms married from model to the view
public bool IsMarried
{
get
{
if (customer.Married == "Married")
{
return true;
}

else if (customer.Married == "UnMarried")
{
return false;
}

return false;

}

set
{
if (value)
{
customer.Married = "Married";
}

else
{
customer.Married = "UnMarried";
}
}



}

//this property maps tax from model to the view
public string TaxAmount
{
get { return Convert.ToString(customer.Tax); }

}

}
}

查看XAML:
<Window x:Class="MVVMPractice2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Title="MainWindow" Height="350" Width="525"> <!--PRISM POWER-->
<Grid>
<Label Content="Customer Name" HorizontalAlignment="Left" Margin="0,0,0,292.8"></Label>
<Label Name="lblName" HorizontalAlignment="Left" Margin="108,0,0,292.8" Width="37" Content="{Binding TxtCustomerName}"></Label>

<Label Content="Sales Amount" HorizontalAlignment="Left" Margin="0,28,0,264.8"></Label>
<TextBox Name="lblAmount" HorizontalAlignment="Left" Margin="101,28,0,264.8" Width="44" Text="{Binding TxtAmount}"></TextBox>

<Label Content="Buying Habits" HorizontalAlignment="Left" Margin="0,56,0,236.8"></Label>
<Label Name="lblBuyingHabits" HorizontalAlignment="Left" Margin="108,56,0,236.8" Width="52" Background="{Binding LblAmountColor}"></Label>

<Label Content="Married" HorizontalAlignment="Left" Margin="0,84,0,208.8" Width="62"></Label>
<CheckBox Name="chkMarried" HorizontalAlignment="Left" Margin="102,84,0,208.8" IsChecked="{Binding IsMarried}"></CheckBox>

<Label Content="Tax" HorizontalAlignment="Left" Margin="0,112,0,180.8"></Label>
<TextBlock Name="lblTax" HorizontalAlignment="Left" Margin="108,117,0,175.8" Width="37" Text="{Binding TaxAmount}"></TextBlock>

<Button Name="btnTax" Content="Calculate Tax" Margin="118,158,287.4,123.8" Command="{Binding UpdateCommand}" ></Button>

</Grid>
</Window>

最佳答案

ICustomer的注册在创建MainWindowViewModel之后发生,因此无法解决。

在 bootstrap 中将Container.RegisterType<ICustomer, Customer>();移到ConfigureContainer中就可以了。它看起来像

protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterType<ICustomer, Customer>();
}

关于c# - 无法创建 Prism 外壳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com