为了账号安全,请及时绑定邮箱和手机立即绑定

该类型不能用作泛型类型或方法中的类型参数“TTo”。没有隐式引用转换

该类型不能用作泛型类型或方法中的类型参数“TTo”。没有隐式引用转换

C#
慕哥6287543 2023-04-16 10:12:21
我目前正在尝试使用 Unity 将 ViewModel 注入我的 WPF 应用程序。我倾向于使用一个ViewModelLocator类将所有 ViewModel 存储在一个区域中,以便在它们之间快速导航我已将我的应用程序分成四个项目:KeystonePP.Models- 持有我的 EF 模型KeystonePP.Startup- 主要启动逻辑KeystonePP.ViewModels- ViewModel 及其接口KeystonePP.Views- 意见我IViewModelLocator在一个单独的项目中有一个接口:KeystonePP.ViewModelspublic interface IViewModelLocator{    // No code here. Just a contract}这是由我的ViewModelLocator班级实施的public class ViewModelLocator : ObservableObject, IViewModelLocator{    // Lots of code here}在我的KeystonePP.Startup项目中,我调整了我的MainWindow.xaml.cs构造函数:public partial class MainWindow : Window{    public MainWindow (IViewModelLocator viewModelLocator)    {        InitializeComponent();        DataContext = viewModelLocator;    }}但是,当我在 中尝试以下代码时App.xaml.cs,收到错误警告:public partial class App : Application{    /// <summary>    /// Startup Logic for App    /// </summary>    /// <param name="e"></param>    protected override void OnStartup (StartupEventArgs e)    {        base.OnStartup(e);        IUnityContainer container = new UnityContainer();        container.RegisterType<IViewModelLocator, MainWindow>();    }}我收到以下错误:类型“KeystonePP.Startup.MainWindow”不能用作泛型类型或方法“UnityContainerExtensions.RegisterType(IUnityContainer, params InjectionMember[])”中的类型参数“TTo”。没有从“KeystonePP.Startup.MainWindow”到“KeystonePP.ViewModels.Utility.Interfaces.IViewModelLocator”的隐式引用转换。我是不是太复杂了,还是我错过了一些简单的 Unity 设置?
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

你想用它们的实现注册抽象。


IUnityContainer container = new UnityContainer();

container.RegisterType<IViewModelLocator, ViewModelLocator>();

container.RegisterType<MainWindow>();

这样当你打电话解决MainWindow


var mainWindow = container.Resolve<MainWindow>();

mainWindow.Show();

容器将知道如何在解析时基于抽象注入实现。


查看完整回答
反对 回复 2023-04-16
  • 1 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信