我碰到 了停产通知的的SerilogWeb.Owin包,并在阅读GitHub的问题有关于给出的包〜5K +下载"重定向人某处"的讨论.
但我无法弄清楚我被重定向到哪里!
那么,在将Serilog与(OWIN)自托管Web API一起使用时,我应该在哪里寻找"Serilog-blessed"集成?
我正在努力解决如何在模块中组织我的Autofac组件注册,因为某些模块本身具有依赖性.
我在一个接口中实现了配置数据的抽象(即 web.config):
interface IConfigurationProvider
{
T GetSection<T>(string sectionName)
where T : System.Configuration.ConfigurationSection;
}
Run Code Online (Sandbox Code Playgroud)
以及ASP.NET(WebConfigurationProvider)和"桌面"应用程序(ExeConfigurationProvider)的实现.
然后我的一些autofac模块需要IConfigurationProvider一个构造函数参数,但有些不需要:
class DependentModule : Module
{
public DependentModule(IConfigurationProvider config)
{
_config = config;
}
protected override void Load(ContainerBuilder builder)
{
var configSection = _config.GetSection<CustomConfigSection>("customSection");
builder.RegisterType(configSection.TypeFromConfig);
}
private readonly IConfigurationProvider _config;
}
class IndependentModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(/* other stuff not based on configuration */);
}
}
Run Code Online (Sandbox Code Playgroud)
由于RegisterType()扩展方法不接受注册委托(Func<IComponentContext, T>),就像 …
我正在尝试使用NHibernate的Criteria API来表达一个SQL查询,而我遇到了困难,因为我正在考虑以数据库为中心的方式,而NHibernate是以对象为中心的.
SQL(效果很好):
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
inner join
(select max(innerT.id)
from tbl innerT
group by innerT.col1) grpT
on outerT.id = grpT.id
Run Code Online (Sandbox Code Playgroud)
从本质上讲,这是一个表与自身子集的自连接.我想我可以尝试将自我加入变成一个限制:
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
where outerT.id in (select max(innerT.id) from tbl innerT group by innerT.col1)
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何使用NHibernate来表达它; 我正在使用DetachedCriteria的ProjectionList并且只想max(id)在分组时选择col1.
非常感谢您的建议!
是否有可能(甚至是合理的)进行System.Timers.Timer异步方法的回调?就像是:
var timer = new System.Timers.Timer
{
Interval = TimeSpan.FromSeconds(30).TotalMilliseconds,
AutoReset = true
};
timer.Elapsed += async (sender, e) => { /* await something */ };
timer.Start();
Run Code Online (Sandbox Code Playgroud)
它编译(显然是一个好的开始),但我不确定我理解后果.计时器await是否会在重置计时器之前进行回调?
在执行以下代码时,我在FireFox 38.0.1(编写本文时的最新版本的全新安装)中遇到了一个令人惊讶的异常:
var d = new Date()
var formattingOptions = { timeZone: 'America/New_York', month: '2-digit', day: '2-digit', year: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' };
var formattedDate = d.toLocaleString('en-US', formattingOptions);
Run Code Online (Sandbox Code Playgroud)
显然,FireFox不喜欢我使用formattingOptions.timeZone,并且响应如下: RangeError: invalid time zone in DateTimeFormat(): AMERICA/NEW_YORK
FireFox在日期格式化方法的实现中是否不支持IANA时区(例如Date.prototype.toLocaleString,Intl.DateTimeFormat等)?
除了轮询,我怎么知道长时间运行的Amazon EC2操作何时完成?例如,使用CreateImageAPI函数可能需要几分钟的时间.
现在我这样做:
// MAKE THE API CALL
var createRequest = new CreateImageRequest().WithInstanceId("i-123456").WithName("MyNewAMI");
var createResponse = myAmazonEC2Client.CreateImage(createRequest);
var imageId = createResponse.CreateImageResult.ImageId;
// ICKY POLLING CODE
bool isImaging = true;
while (isImaging)
{
var describeRequest = new DescribeImagesRequest().WithImageId(imageId);
var describeResponse = myAmazonEC2Client.DescribeImages(describeRequest);
isImaging = describeResponse.DescribeImagesResult.Image.Single().ImageState == "pending";
Thread.Sleep(10000); // sleep for 10 seconds
}
// CreateImage IS COMPLETE; MOVE ON WITH OUR WORK
Run Code Online (Sandbox Code Playgroud)
我讨厌这个.在打电话之后CreateImage,我想以某种方式得到通知它已经完成并继续前进.这可能吗?我在这个例子中使用的是AWS .NET SDK,但我并不是专门针对C#解决方案.
更新:交叉发布到AWS论坛
我的域模型中有一个具有子对象的对象.如何根据孩子的属性使用条件查询进行排序?
例如:
class FooType
{
public int Id { get; set; }
public string Name { get; set; }
public BarType Bar { get; set; }
}
class BarType
{
public int Id { get; set; }
public string Color { get; set; }
}
...
// WORKS GREAT
var orderedByName = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Name")).List();
// THROWS "could not resolve property: Bar.Color of: FooType"
var orderedByColor = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Bar.Color")).List();
Run Code Online (Sandbox Code Playgroud)
启用此方案需要执行哪些操作?我正在使用NHibernate 2.1.谢谢!
我正在努力学习如何在异步方法的世界中执行一些非常长时间运行的后台处理.
使用Stephen Cleary的博客中的词汇,我有兴趣在"承诺任务" 之后启动 "委托await任务".我希望尽快返回承诺的值,并让委托任务在后台继续.
为了处理uned await-ed委托任务中的异常,我将使用在此处描述的模型之后建模的异常处理延续.
public async Task<int> ComplexProcessAsync()
{
...
int firstResult = await FirstStepAsync();
// THE COMPILER DOESN'T LIKE THIS
Task.Run(() => VeryLongSecondStepIDontNeedToWaitFor(firstResult)).LogExceptions();
return firstResult;
}
Run Code Online (Sandbox Code Playgroud)
因为VeryLongSecondStep...()可能需要很多分钟,并且其结果纯粹是通过副作用(例如出现在数据库中的记录)可观察到的,所以我不愿意这样做await.
但正如所指出的,编译器并不喜欢这样.它警告说"Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call."
我可以忽略这个警告,但我觉得我不是以"正确"的方式做这件事.那么,什么是 …
我有一个在Windows服务中托管的基于OWIN的ASP.NET Web API.我的大多数ApiController操作都是异步的,并接受CancellationToken参数:
[Route("data/{id}")]
public async Task<IHttpActionResult> GetSomeDataAsync(int id, CancellationToken token)
{
try
{
using (var _dataSource = ...)
{
return Ok(await _dataSource.GetDataAsync(id, token));
}
}
catch (OperationCanceledException ex)
{
return StatusCode(HttpStatusCode.NoContent);
}
}
Run Code Online (Sandbox Code Playgroud)
使用Web API的内置请求取消功能,如果客户端取消请求,token则发出信号并_dataSource适当地处理它并抛出OperationCanceledException.
到目前为止,太棒了.
但是当我的主机进程终止时(即Windows服务停止),token没有发出信号,并且取消和纾困过程不优雅.
我知道OWIN环境字典的host.onAppDisposing属性,我已经挖掘了Microsoft.Owin [.*]和Microsoft.AspNet.WebApi.*包的源代码,试图弄清楚其中GetSomeDataAsync的token参数是什么来自,但我不知道如何将各个部分连接在一起.
我想做点什么
class WebServiceInAWindowsService : ServiceBase
{
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
...
protected override …Run Code Online (Sandbox Code Playgroud) 我正在尝试对执行相当复杂的操作的方法进行单元测试,但是我已经能够将这个操作分解为可模拟接口上的许多步骤,如下所示:
public class Foo
{
public Foo(IDependency1 dp1, IDependency2 dp2, IDependency3 dp3, IDependency4 dp4)
{
...
}
public IEnumerable<int> Frobnicate(IInput input)
{
var step1 = _dependency1.DoSomeWork(input);
var step2 = _dependency2.DoAdditionalWork(step1);
var step3 = _dependency3.DoEvenMoreWork(step2);
return _dependency4.DoFinalWork(step3);
}
private IDependency1 _dependency1;
private IDependency2 _dependency2;
private IDependency3 _dependency3;
private IDependency4 _dependency4;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用模拟框架(Rhino.Mocks)来生成模拟以进行测试,并且以此处所示的方式构造代码到目前为止非常有效.但是,如何在没有需要每个模拟对象和每次期望设置的大型测试的情况下对此方法进行单元测试?例如:
[Test]
public void FrobnicateDoesSomeWorkAndAdditionalWorkAndEvenMoreWorkAndFinalWorkAndReturnsResult()
{
var fakeInput = ...;
var step1 = ...;
var step2 = ...;
var step3 = ...;
var fakeOutput = ...;
MockRepository mocks = new …Run Code Online (Sandbox Code Playgroud) 引用Serilog Wiki:
ApplicationLifecycleModule将自动启用...
好,太棒了.这是怎么回事?它没有列在<modules/>web.config 的元素中,并且在我的代码中没有任何引用.那么将它们连接起来的神奇之处在哪里?
我有一个非常简单的 LINQ 表达式:
class Foo
{
...
int Id { get; }
}
IEnumerable<Foo> foos = ...;
IEnumerable<int> ids = ...;
var remainder = foos.Where(f => !ids.Contains(f.Id));
Run Code Online (Sandbox Code Playgroud)
我认为可能有一种方法可以remainder使用Join()and/orIntersection()和/or生成相同的集合Except(),但我不够聪明,无法制定它。
我!在 Join() 中苦苦挣扎,因为就以下方面而言,投影集交集Join()是:
var intersection = foos.Join(ids, f => f.Id, i => i, (f, id) => f);
Run Code Online (Sandbox Code Playgroud)
但我正在寻找相反的东西。你能帮我吗?谢谢!
c# ×5
asp.net ×2
async-await ×2
criteria ×2
nhibernate ×2
owin ×2
serilog ×2
.net ×1
amazon-ec2 ×1
autofac ×1
criteria-api ×1
ec2-ami ×1
firefox ×1
javascript ×1
linq ×1
mocking ×1
rhino-mocks ×1
sorting ×1
unit-testing ×1