WPF Prism Unity - RegisterType with InjectionConstructor



我有一个简单的.Net Core WPF/PRISM/Unity App,它有这样的类:

public class MyClass : IMyClass
{
public MyClass(string someMessage)
{
}
}
public interface IMyClass
{
}

在 App.Xaml 中.cs我有以下内容:

public partial class App : PrismApplication
{
protected override Window CreateShell()
{
Container.GetContainer().AddExtension(new Diagnostic());
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<MainWindow>();
containerRegistry.GetContainer().RegisterType(
typeof(IMyClass), 
typeof(MyClass), 
"", 
new TransientLifetimeManager(), 
new InjectionConstructor("Some nice message"));
}
}

但是如果我尝试注入IMyClass...

public partial class MainWindow : Window
{
private readonly IMyClass myClass;
public MainWindow(IMyClass myClass)
{
InitializeComponent();
this.myClass = myClass;
}

我收到以下错误:

Unity.ResolutionFailedException:"当前类型WpfApp7.IMyClass是一个接口,无法构造。是否缺少类型映射?


在以下情况下发生异常:

·解析类型:"IMy类" 参数:"我的类" 在构造函数上: MainWindow(IMyClass myClass( ·解析类型:"主窗口">

我做了一个控制台应用程序 - 没有棱镜 - 并做了相同的代码,它运行良好。

您应该在CreateShell()方法中创建MainWindow。这有效:

public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.GetContainer().RegisterType(
typeof(IMyClass),
typeof(MyClass),
"",
new TransientLifetimeManager(),
new InjectionConstructor("Some nice message"));
}
}
public class MyClass : IMyClass
{
public MyClass(string s)
{
//...
}
}

我解决了它...,而是使用这种通用方法。

containerRegistry.GetContainer().RegisterType<IMyClass, MyClass>(new InjectionConstructor(new object[] { "Works Nicely" }));

感谢您的时间和精力。

最新更新