我有以下代码:
MatchCollection matches = myRegEx.Matches(content);
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Linq扩展方法语法执行此操作?像这样的东西......
bool result = matches.Any(x => ... );
Run Code Online (Sandbox Code Playgroud) 我目前正在使用带有控制台应用程序的HtmlAgilityPack来抓取一个网站.由于html是编码的(它返回编码的字符'),我必须解码才能将内容保存到我的数据库.
有没有办法使用HtmlAgilityPack解码返回的html而不必使用HttpUtility.HtmlDecode?我希望尽可能避免将System.Web添加到我的控制台应用程序中.
我目前正在使用TopShelf和控制台应用程序来创建Windows服务.当我将代码作为控制台应用程序运行时,我使用一些Console.WriteLine()来输出结果.一旦代码执行了它应该执行的操作,我将控制台应用程序安装为Windows服务.
即使Windows服务无法写入控制台,离开Console.WriteLine()代码是否有任何缺点?如果我将Console.WriteLine()留在那里,是否存在代码不稳定的风险?
是否可以使用集成的Visual Studio 2010测试运行器来运行除MSTest之外的其他框架(Xunit,NUnit等)?
有人知道吗?
我试图在我的asp.net mvc 3应用程序中实现tweetsharp,但我遇到了问题.
我用以下设置创建了一个新的twitter应用程序:
然后,我使用他们网站上提供的示例进行了一些小的更改:
public ActionResult Twitter()
{
TwitterService service = new TwitterService("key", "secret");
OAuthRequestToken requestToken = service.GetRequestToken("http://127.0.0.1:8545/Membership/TwitterOAuth");
var uri = service.GetAuthorizationUri(requestToken);
return new RedirectResult(uri.ToString(), false /*permanent*/);
}
public ActionResult TwitterOAuth(string oauth_token, string oauth_verifier)
{
var requestToken = new OAuthRequestToken { Token = oauth_token };
TwitterService service = new TwitterService("key", "secret");
OAuthAccessToken accessToken = service.GetAccessToken(requestToken, oauth_verifier);
service.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
TwitterUser user = service.VerifyCredentials();
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
每当我弄乱他的代码时,我都会被重定向到以下的推特网址:https: …
我目前正在使用以下代码:
public class MyProvider
{
public MyProvider()
{
}
public void Fetch()
{
using (PopClient popClient = new PopClient())
{
....
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为我希望能够对Fetch方法进行单元测试,并且由于我无法模拟PopClient,所以我创建了一个接口和一个调用PopClient的包装类.我更新的代码如下:
public class MyProvider
{
private readonly IPopClient popClient;
public MyProvider(IPopClient popClient)
{
this.popClient = popClient;
}
public void Fetch()
{
using (var pop3 = popClient)
{
....
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Ninject进行依赖注入,我不太确定using语句在更新的代码中会产生什么样的影响,因为Ninject已经创建了一个PopClient实例并将其注入到构造函数中.
using语句是否会处理pop3对象并单独保留popClient对象,以便Ninject可以处理它或者using语句是否会干扰Ninject?
在这种情况下,正确的方法是什么?任何见解都会非常有帮助.
我使用存储库模式使用Ninject配置了MVC 3解决方案.我的一些绑定包括:
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InRequestScope();
kernel.Bind<IMyService>().To<MyService>().InRequestScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我还在我的解决方案中添加了一个控制台应用程序,我希望利用相同的存储库和服务.我的控制台应用程序的Ninject配置如下所示:
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InSingletonScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InSingletonScope();
kernel.Bind<IMyService>().To<MyService>().InSingletonScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我的控制台代码如下:
static void Main(string[] args)
{
IKernel kernel = new StandardKernel(new IoCMapper());
var service = kernel.Get<IMyService>();
var logger = kernel.Get<ILogging>();
... do some processing here
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想确保我正在为控制台应用程序正确配置Ninject.在我的控制台应用程序中对我的所有绑定使用InSingletonScope()是否正确?我应该以不同的方式配置它吗?
我有以下代码:
bundles.UseCdn = true;
var fontPath = "http://fonts.googleapis.com/css?family=Open+Sans:400italic,600italic,400,600";
var commonCss = new StyleBundle("~/css/common").Include(
"~/Content/less/myless.less",
"~/Content/css/opensans.css", // local copy of the font path above
"~/Content/less/mylessoverrides.less",
"~/Content/css/font-awesome.css");
commonCss.Transforms.Add(new CssMinify());
bundles.Add(commonCss);
Run Code Online (Sandbox Code Playgroud)
上面的代码工作得很好.但是,我想从上面的CDN链接加载opensans.css.我还想将它保持为一个捆绑包并保持捆绑订单完好无损.以下代码将引发错误:
var commonCss = new StyleBundle("~/css/common").Include(
"~/Content/less/myless.less",
"http://fonts.googleapis.com/css?family=Open+Sans:400italic,600italic,400,600",
"~/Content/less/mylessoverrides.less",
"~/Content/css/font-awesome.css");
The URL 'http://fonts.googleapis.com/css?family=Open+Sans:400italic,600italic,400,600'
is not valid. Only application relative URLs (~/url) are allowed.
Run Code Online (Sandbox Code Playgroud)
一种解决方法是将其拆分为三个捆绑包,但这将违背捆绑包的整个目的:
var commonCss1 = new StyleBundle("~/css/common1").Include(
"~/Content/less/myless.less");
var commonCss2 = new StyleBundle("~/css/common2", fontPath).Include(
"~/Content/css/opensans.css");
var commonCss3 = new StyleBundle("~/css/common3").Include(
"~/Content/less/mylessoverrides.less",
"~/Content/css/font-awesome.css");
Run Code Online (Sandbox Code Playgroud)
最终的解决方案是做类似的事情:
var commonCss = new StyleBundle("~/css/common").Include(
"~/Content/less/myless.less",
new …Run Code Online (Sandbox Code Playgroud) 我在我的ASP.NET MVC项目中使用ELMAH,我真的很喜欢它的简单性.但我需要能够以log.Info("message")方式记录我的代码中的某些事件.由于ELMAH没有提供这种能力,我开始关注NLog.
想到几个问题:
非常感谢Anny的反馈.到目前为止,我还没有找到关于此事的好帖子?
我已经看过像Nerddinner和ContactManager这样的简单应用程序以及像Kigg这样的更复杂的应用程序.我理解更简单的那些,现在我想了解更复杂的那些.
通常,较简单的应用程序在LINQtoSQL或实体框架之上具有存储库类和接口(尽可能松散耦合).从控制器调用存储库以执行必要的数据操作.
我在研究更复杂的应用程序(如Kigg或Oxite)时看到的一个常见模式是引入(我只是在这里搔痒但我必须从某处开始):
这是我的问题:
我知道为了真正拥有一个松散耦合的应用程序,你必须使用像Unity这样的东西.但是,当你将Unity引入混合时,你也必须引入一个Web Request Lifetime Manager.这是为什么?为什么像Nerddinner这样的示例应用程序没有Web请求终身管理器?它到底是做什么用的?这是Unity特定的事情吗?
我注意到的第二种模式是引入工作单元.同样,同样的问题:为什么Nerddinner或ContactManager不使用工作单位?相反,这些应用程序使用Linq2Sql或Entity Framework之上的存储库类来执行数据操作.没有任何工作单位的迹象.究竟是什么以及为什么要使用它?
谢谢
以下是DinnersController级别的Nerddiner中DI的示例:
public DinnersController()
: this(new DinnerRepository()) {
}
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
Run Code Online (Sandbox Code Playgroud)
所以我是正确的假设因为第一个构造函数控制器"拥有"DinnerRepository,因此它将依赖于控制器的生命周期,因为它在那里被声明了?