gpt4 book ai didi

c# - 如何选择 WPF Prism 应用程序使用的 IoC 容器?

转载 作者:行者123 更新时间:2023-12-05 04:28:46 39 4
gpt4 key购买 nike

我正在使用 Prism 7 和 .Net 6 以及 MediatR 开发应用程序,我的 app.xaml 是

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

var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
}

class Bootstrapper : PrismBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//I Want To Use Unity Here
}
}

问题是我想使用为 IUnityContainer 设计的扩展方法但我不能,因为我的 RegisterTypes 方法中有 IContainerRegistry 而不是 IUnityContainer Bootstrap

  public static IUnityContainer RegisterMediator(this IUnityContainer container, ITypeLifetimeManager lifetimeManager)
{
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
.RegisterInstance<ServiceFactory>(type =>
{
var enumerableType = type
.GetInterfaces()
.Concat(new[] { type })
.FirstOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>));

return enumerableType != null
? container.ResolveAll(enumerableType.GetGenericArguments()[0])
: container.IsRegistered(type)
? container.Resolve(type)
: null;
});
}

prism 支持几个 IoC 容器,DryIoc,shiny,但确实没有文档如何更改默认 IoC 容器,如何选择 WPF Prism 应用程序使用哪个 IoC 容器?在这种情况下,我想选择 Unity,这样我就可以使用我的 mediatR 扩展,我已经搜索了整个网站,但没有成功。谢谢

最佳答案

Prism.Unity命名空间中,有一个IContainerProvider的扩展方法。

public static IUnityContainer GetContainer(this IContainerProvider containerProvider)

您可以在您的 PrismBootstrapper 中使用它。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
IUnityContainer container = Container.GetContainer();
}

关于c# - 如何选择 WPF Prism 应用程序使用的 IoC 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72531854/

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