gpt4 book ai didi

c# - CaSTLe Windsor 到 Unity - 你能像在 CW 中一样在 Unity 中自动配置吗?

转载 作者:太空狗 更新时间:2023-10-29 21:37:19 24 4
gpt4 key购买 nike

我不知道这是不是一个太具体的问题,如果可能的话,但我必须将使用 CaSTLe Windsor 的应用程序移植到 Unity,这样就不会依赖非 Microsoft 批准的库.我知道我知道,但你打算做什么。

不管怎样,我已经做到了,但我对我所拥有的并不满意。在温莎,我有这个:

Register(
AllTypes.Of(typeof(AbstractPresenter<>)).FromAssemblyNamed("Links.Mvp"),
AllTypes.Of(typeof(IView)).FromAssemblyNamed("Links.WinForms").WithService.FromInterface());

我统一转换成了这个

RegisterType<IMainView, MainView>();
RegisterType<IConfigureLinkView, ConfigureLinkView>();
RegisterType<IConfigureSourceView, ConfigureSourceView>();
RegisterType<IConfigureSinkView, ConfigureSinkView>();
RegisterType<MainPresenter, MainPresenter>();
RegisterType<ConfigureLinkPresenter, ConfigureLinkPresenter>();
RegisterType<ConfigureSourcePresenter, ConfigureSourcePresenter>();
RegisterType<ConfigureSinkPresenter, ConfigureSinkPresenter>();

如您所见,我不得不注册每一件事,而不是能够使用某种自动配置。所以我的问题是:是否有更好的统一方式来做到这一点?

谢谢,

亚当。

最佳答案

检查 this出:

        var container = new UnityContainer();

container
.ConfigureAutoRegistration()
.LoadAssemblyFrom("Plugin.dll")
.IncludeAllLoadedAssemblies()
.ExcludeSystemAssemblies()
.ExcludeAssemblies(a => a.GetName().FullName.Contains("Test"))
.Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode())
.Include(If.ImplementsITypeName, Then.Register().WithTypeName())
.Include(If.Implements<ICustomerRepository>, Then.Register().WithName("Sample"))
.Include(If.Implements<IOrderRepository>,
Then.Register().AsSingleInterfaceOfType().UsingPerCallMode())
.Include(If.DecoratedWith<LoggerAttribute>,
Then.Register()
.AsInterface<IDisposable>()
.WithTypeName()
.UsingLifetime<MyLifetimeManager>())
.Exclude(t => t.Name.Contains("Trace"))
.ApplyAutoRegistration();

关于c# - CaSTLe Windsor 到 Unity - 你能像在 CW 中一样在 Unity 中自动配置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/391391/

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