一起使用F#和Caliburn.Micro

Kav*_*ian 5 wpf f# mvvm caliburn.micro f#-3.1

据我了解,Caliburn.Micro以常规的方式为WPF项目进行了大量的自动装配和管道安装。使用MVVM。

问题:Caliburn.Micro中是否有任何C#特定的零件?哪些使用了仅C#的功能?Caliburn.Micro的哪些部分不能与F#代码一起使用?使用F#我会失去什么?

Pat*_*iek 5

不幸的是,Caliburn.Micro和F#不能很好地协同工作。

例如,Caliburn.Micro在约定匹配(通过反射)期间将视图视为常规类,这对于C#是正确的-视图是局部类。

F#不支持部分类,并且视图是XAML文件。这意味着Caliburn.Micro无法解决这些问题。这也意味着在引导程序中连接IoC容器时会遇到问题,因为它无法创建视图-至少在没有手动注册Application.LoadComponent等的情况下是无法创建的。

设置boosterapper也很麻烦,因为您必须在中指定键App.xaml,但无论出于何种原因,该键都不会与类匹配。Bootstrapper<T>也传递bool useApplication = trueBootstrapperBase作为默认-和F#有根据该标志是否被设置与否,不幸的是我不记得细节不同的问题。这是因为在F#中,您可以自行将入口点连接到应用程序,而Caliburn.Micro可以自动拦截该步骤。导致冲突...

如果您通过完全重写约定解析机制并按自己的意愿弯曲任何IoC容器来使其工作,则可以为您带来更多的功能。我认为,目前存在太多摩擦。

就个人而言,我将使用Caliburn.Micro为C#中的应用程序建立核心基础,并在F#中进行“实际工作”。另外,我认为您甚至可以在单独的项目中使用F#编写视图模型,在C#项目中使用视图模型,那么您只需要调整引导程序中约定查找的工作方式即可。我不确定这种方法,因此您的行程可能会有所不同,请谨慎操作。