在面向.NET 4+的库中公开通知时,IObservable是否应优先于事件

我有一个.NET库,作为对象模型的一部分将发出某些事件的通知。 在我看来, 事件的主要优点是初学者的可接近性(以及某些消费环境中的简单性),主要的负面因素是它们不可组合 ,因此如果你想做任何事情,它们会被立即强制进入Observable.FromEvent *有趣的是没有编写代码丛。 正在解决的问题的本质是事件流量不会特别频繁或大量(它肯定不会尖叫RX),但绝对没有要求支持4.0之前的.NET版本[因此我可以使用System.Reactive内置的IObservable接口,不会强制对消费者产生任何重大依赖关系]。 我对一些通用指南感兴趣, 但是从API设计的角度来看,更喜欢IObservables不是event的一些具体原因 – 无论我的具体案例可能在哪里 – IObservable频谱。 那么,问题是: 如果我采用最简单的方法并且暴露event而不是IObservable那么对于API消费者来说,是否有任何具体的事情变得更加困难或有问题? 或者,重申:除了消费者必须执行Observable.FromEvent *才能组合事件之外,在API中公开通知时,是否真的没有理由更喜欢IObservable而不是event ? 使用IObservable进行非尖叫-RX内容或编码指南的项目的IObservable将是理想的,但并不重要。 在@Adam Houldsworth的评论中提到NB,我对.NET 4+库的API表面的具体内容感兴趣,而不是对我们这个时代代表更好的“默认架构”的意见调查: ) 注意,在C#中, IObserver和IObservable已经触及了这个问题, 对于Observer vs Delegates,事件和IObservable与普通事件或我为什么要使用IObservable? 。 由于SRP违规,我提出的问题的方面没有在任何答复中得到解决。 另一个略微重叠的问题是.NET Rx优于经典事件? 。 (使用IObservable而不是事件)[ 使用IObservable而不是事件属于同一类别。

Windowsapp store应用内购买订阅模式

很久以前,微软宣布开发人员可以将IAP(应用程序内购买)作为自动续订订阅出售,即用户需要支付一次,直到用户明确取消订阅为止。 有一些通知: Dev Center开放用于Windows 10应用程序提交,添加了新function 您是否计划将订阅/定期购买添加到Windowsapp store? Bernardo Zamora:是的。 这是Build中提到的将在未来几个月内推出的function之一。 我们将让所有开发人员知道此function何时可用。 大段引用 贝尔纳多萨莫拉 微软 将Windows应用程序分发给全世界 新的订阅支持应用内购买function将通过Windows 10进行扩展,以包含定期计费或订阅选项,该选项将使Windowsapp store使用商店结算系统销售基于订阅的内容。 对于内容和生产力服务非常有用,此订阅function将支持大多数市场中的Windowsapp store消费者支付方式,并具有开发人员可配置的时间段。 到目前为止,我在Windows SDK和Windows Developer Dashboard(App发布设置)中都没有看到类似的内容。 我也没有在MSDN上找到任何关于此事的内容。 具有有限寿命的持久IAP并不好,因为它使用户每隔一段时间明确地重新购买IAP。 Windows 10周年更新将于2016年8月2日出现,并且有间接迹象表明Windows Store将支持IAP订阅,我要求Windows Insider程序成员了解详细信息。 在IAP订阅的实施方式上是否有任何样本? 更新(2017年1月1日) : 有些信息开始出现在MSDN中。 新的Windows.Services.Store命名空间中有一个StoreSubscriptionInfo类,可用于面向Windows 10,版本1607及更高版本的UWP应用程序。 截至1st of Jan 2017 , StoreSubscriptionInfo类文档指出: 提供代表具有定期结算的订阅的产品SKU的订阅信息。 Windows开发人员中心或商店目前不支持订阅。 此类的存在是为了提供对订阅的未来支持,并且不应由当前版本中的代码使用。 更新(2017年8月24日) : 最近出现了一些有用的文档: 为您的应用启用订阅加载项 。 很遗憾这个早期采用计划并不公开。 更新(2017年10月5日) : 我有来自@Stefan Wick […]

创建对象的最佳方式

这似乎是非常愚蠢和基本的问题,但我试图谷歌它,但无法找到一个满意的答案, public class Person { public string Name { get; set; } public int Age { get; set; } public Person(){} public Person(string name, int age) { Name = name; Age = age; } //Other properties, methods, events… } 我的问题是,如果我有这样的课程,创建一个对象的最佳方法是什么? Person p=new Person(“abc”,15) 要么 Person p=new Person(); p.Name=”abc”; p.Age=15; 这两种方法有什么区别,创建对象的最佳方法是什么?

使用NLog作为翻转文件记录器

如何 – 如果可能 – 我可以使用NLog作为翻转文件记录器吗? 仿佛: 我希望31天内最多可以有31个文件,当新的一天开始时,如果有一个旧日志文件##。log,那么它应该被删除但是在那一天所有的日志都会被附加,至少会在那里为期27天。

WPF的ICollectionView.filter包含大量数据

我正在开发一个wpf应用程序,其中包含一个包含大量数据(10 000到100 000)行的列表视图。 用户可以将各种filter应用于此列表视图,使filter逻辑非常先进(并且速度慢)。 目前,我的代码的相关部分如下所示: ICollectionView view = CollectionViewSource.GetDefaultView(hugeList.ItemsSource); view.Filter = new Predicate(FilterCallback); private bool FilterCallback(object item) { //Filter logic } 但是这会在UI线程中运行并在过滤时阻止整个应用程序,这会给用户带来非常糟糕的体验。 所以我的问题是:有没有人知道在wpf中过滤listview的“更好”方法,还是应该过滤底层的ObservableCollection ?

获取entity framework6在其下面的SELECT语句中使用NOLOCK

我在MVC 5项目中使用Entity Framework 6。 如您所知,如果我们在其中使用WITH (NOLOCK) ,则SQL Server中的SELECT查询执行速度更快,效率更高。 我查看了Entity Framework 6生成的一些SQL SELECT语句,并意识到它们都不包含NOLOCK。 我不想在我的提取操作中使用事务来读取未提交的事务。 如何在下面生成的SELECT语句中强制使用EF 6来使用NOLOCK?

SqlDataReader vs SqlDataAdapter:哪一个具有更好的返回DataTable的性能?

我想知道哪一个具有更好的性能来返回DataTable 。 这里为SqlDataReader我使用DataTable.Load(dr) 使用SqlDataReader : public static DataTable populateUsingDataReader(string myQuery) { DataTable dt = new DataTable(); using (SqlConnection con = new SqlConnection(constring)) { SqlCommand cmd = new SqlCommand(myQuery, con); con.Open(); SqlDataReader dr = null; dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (dr.HasRows) { dt.Load(dr); } return dt; } } 使用SqlDataAdapter : public DataTable populateUsingDataAdapter(string myQuery) { SqlDataAdapter dap […]

是否可以静默运行.NET Core控制台应用程序(隐藏控制台窗口)?

我正在尝试为自己自动执行某些任务,并编写了一些.NET Core 1.0控制台应用程序。 其中之一是BrowserRouter–一个简单的应用程序,基于url模式,决定在我点击http(s)链接时打开哪个浏览器/浏览器配置文件。 这工作正常,但总会出现控制台窗口,并立即消失。 有没有办法静默运行.NET Core控制台应用程序(隐藏控制台窗口)? 我知道在完整的.NET Framework中,可以将输出类型更改为Windows应用程序,但是对于.NET Core ,这是不可用的(但是?)。

何时使用HashTable

在C#中,我发现自己在99%的时间内使用List , IList或IEnumerable 。 是否有一种情况,在这些情况下使用HashTable (或2.0以上的Dictionary )会更好? 编辑: 正如所指出的那样,有人想对这个集合做什么通常会决定一个人应该使用什么,所以你何时会在List使用Hashtable / Dictonary List ?

ASP.NET中的会话超时警告

我有一个asp.net站点,当会话达到超时时我需要弹出/层/警报(比方说10分钟)。 弹出窗口将显示您的帐户会话将由于不活动而显示,并且具有用于继续会话的按钮或用于注销的按钮。 我在网上看到了不同的方法,但处理这个问题的最佳/正确方法是什么? 如果弹出窗口打开时间过长,是否需要额外超时?