有没有一种聪明的方法来记录对 F# 中的对象所做的更改?
我一直在研究 F# 作为构建通过网络复制自身的对象模型的一种方式。我需要解决的一项任务是如何检测对对象所做的更改,以便我只能将更改发送给客户端
注:我在寻找答案,其他不是“执行INotifyPropertyChanged”或“做一些事情,可以很容易地在C#来完成”。如果这是在 F# 中解决问题的唯一方法,那么 F# 不是我正在寻找的工具。
为什么是 F#?因为我对在 C# 中实现这种状态观察者模式的方式并不满意。因此,我正在研究是否有一些优雅的方式以动态语言实现它,从 F# 开始。
我已经阅读了很多Autofac文档/ wiki,表明我可以通过执行如下所示的简单操作获得所有已注册类型的列表:
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.AssignableTo<IPersistedModel>();
var container = builder.Build();
var allTypes = container.Resolve<IEnumerable<IPersistedModel>>();
Run Code Online (Sandbox Code Playgroud)
问题是allTypes出现空白.
在调试器中,我可以看到容器内部有7种匹配类型甚至IPersistedModel数组...但它们不会在Resolve()上返回.
我错过了什么?
我有一个WPF应用程序,从数据源加载数据.
在加载某些数据之前,无需显示任何内容.
我的问题是:
我收到消息"文件或差异未显示:文件是二进制".
为什么mercurial(hg)将我的visual studio解决方案(.sln)视为二进制?
我该如何阻止它?
谢谢
我正在使用独立关联(延迟加载)来访问我的代码优先模型中的相关实体,例如
public class Aaa {
public int AaaId {get;set;}
public string SomeValue {get;set;}
}
public class Bbb {
public int BbbId {get;set;}
public string SomeValue {get;set;}
public virtual Aaa MyIndependentAssociation {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在MyIndependentAssociation不实际加载记录的情况下访问外键值。
我假设Aaa_AaaId当我Bbb从数据库中检索实体时实际加载了该值(无论如何,根据实体表上的调试可视化工具)。
我如何访问该值(除了将外键关联添加到我的模型中)?
我试图从某些枚举类型的值集中排除某些枚举值,例如Unknown和。Uninitialized
我可以看到它Enums是使用给定类型EnumGenerator的所有可能Enum值的集合以循环方式生成的Enum。
基于该代码,我的第一个想法是构建一个ISpecimenBuilder检查Type.IsEnum并执行context.Resolve(request)直到直到Resolve返回不在排除列表中的值的对象。
问题是这给了我递归错误。在检查了源代码之后,我明白了原因-如果构建器处理了一个请求,然后Resolve再次用相同的请求调用另一个,您将陷入无限循环。
但是由于它EnumGenerator是不可扩展的,而且我无法弄清楚如何拦截构建链,因此我很困惑如何解决此问题。
当我写.Subscribe表达式时,我经常发现Resharper为我选择了以下重载,位于mscorlib,Version = 4.0.0.0:
namespace System
{
public interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> observer);
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来与大多数重载非常不同,这些重载Action都来自mscorlib,而不是System.Reactive.*我期望大多数Reactive的东西.
这次超载有什么作用?该如何使用?怎么IObserver<T>涉及Action?为什么mscorlib会出现这种单一过载?
Autofixture 能够使用该Fixture.Create<T>()方法创建任何类型的实例。
但是我需要在运行时创建一个类型。默认情况下,非泛型Fixture.Create()需要一个“种子”,这不是我想要的。
如何在运行时创建给定类型的实例?
我有一个异步WCF服务,它采用"URI"并返回一个图像(作为流).
我想要做的是:
到目前为止,我已经想出了这个怪物:
private void PollImage(string imageUri)
{
const int pollingHertz = 1;
const int millisecondsTimeout = 1000 / pollingHertz;
Thread.Sleep(millisecondsTimeout);
if (_channel == null)
{
_channel = _channelFactory.CreateChannel();
}
var getImageFunc = Observable.FromAsyncPattern<string, Stream>
(_channel.BeginGetImage, _channel.EndGetImage);
getImageFunc(imageUri)
.Finally(() => PollImage(imageUri))
.Subscribe(
stream => UpdateImageStream(imageUri, stream),
ex =>
{
Trace.TraceError(ex.ToString());
((ICommunicationObject) _channel).CloseOrAbort();
_channel = null;
});
}
Run Code Online (Sandbox Code Playgroud)
我真的很想学习Rx但是每次尝试都会让我不知所措.
有人愿意给我一些指示吗?谢谢
使用 MSBUILD 时如何从解决方案中获取项目文件列表?
例如从 .sln 获取所有 .csproj。