据我了解,Caliburn.Micro以一种基于约定的方式为WPF项目进行了大量的 Autowiring 和管道安装。使用MVVM。
问题:Caliburn.Micro中是否有任何C#特定的零件?哪些使用了仅C#的某些功能? Caliburn.Micro的哪些部分不能与F#代码一起使用?使用F#我会失去什么?
最佳答案
不幸的是,Caliburn.Micro和F#不能很好地配合。
例如,Caliburn.Micro在约定匹配(通过反射)期间将 View 视为常规类,这对于C#是正确的- View 是局部类。
F#不支持部分类,并且 View 仅是XAML文件。这意味着Caliburn.Micro无法解决这些问题。这也意味着在 bootstrap 中连接IoC容器时会遇到问题,因为它无法创建 View -至少在没有使用Application.LoadComponent
等手动注册的情况下,这是不可能的。
设置boosterapper也很麻烦,因为您必须在App.xaml
中指定 key ,但是无论出于何种原因,该 key 都不与该类匹配。 Bootstrapper<T>
也默认将bool useApplication = true
传递给BootstrapperBase
-F#根据是否设置了该标志而存在不同的问题,不幸的是,我不记得详细信息了。这是因为在F#中,您可以自行将入口点连接到应用程序,而Caliburn.Micro可以自动拦截该步骤。导致冲突...
如果您通过完全重写约定解析机制并按自己的意愿弯曲任何IoC容器使它起作用,则可以为您提供更多的功能。我认为,目前存在太多的摩擦。
就个人而言,我将使用Caliburn.Micro为C#中的应用程序建立核心基础,并在F#中进行“实际工作”。另外,我认为您甚至可以在单独的项目中使用F#编写 View 模型,在C#项目中使用 View 模型,那么您只需要调整 bootstrap 中约定查找的工作方式即可。我不确定这种方法,因此您的行程可能会有所不同,请谨慎操作。
关于wpf - 一起使用F#和Caliburn.Micro,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23597508/