我有一个从数据库返回通用列表集合(List)的方法.此系列包含订单详细信息,即订单ID,订单名称,产品详细信息等.
此外,该方法返回一个集合,该集合仅包含按订单日期降序排序的前5个订单.
我的要求是每次客户端调用此方法时,我需要返回有5个随机命令的集合.
我如何使用C#实现这一目标?
有没有更好的方法使用linq将这个guid字符串列表强制转换为guid:
public static IList<Guid> ToGuidList(this IList<string> guids)
{
IList<Guid> guidList = new List<Guid>();
foreach(var item in guids)
{
guidList.Add(new Guid(item));
}
return guidList;
}
Run Code Online (Sandbox Code Playgroud)
我在看:
guids.Cast<Guid>().ToList()
Run Code Online (Sandbox Code Playgroud)
但这似乎不是诀窍.
任何提示赞赏.
我正在研究我的第一个"真正的"F#装配,并试图做正确的事情.
我设法让xUnit工作,但目前我的测试模块在同一个程序集中.这让我感到困扰,因为这意味着我将发布一个程序集,其中近一半的代码(和80%的API)是测试方法.
这样做的"正确"方法是什么?如果我把测试放在另一个组件中,我认为这意味着我必须暴露内部,我宁愿保密.
我知道在C#中有一个测试的朋友机制(如果这是正确的术语),F#中是否存在等价物?
或者,任何人都可以指出我正在"正确"完成这个项目的示例项目吗?
我有一个基于MEF的解决方案,它有几个导出的接口实现.
我希望能够做的是有一个开关,删除与界面相关的所有当前部件,取而代之的是只用一个实现替换它们.我一直试图用一个CompositionBatch对象做这个,但它似乎不起作用.这是我正在做的一个例子:
[Export(typeof(IFoo)]
public class Foo1 : IFoo
{ }
[Export(typeof(IFoo)]
public class Foo2 : IFoo
{ }
Run Code Online (Sandbox Code Playgroud)
然后我有我的容器:
var container = new CompositionContainer(....);
Run Code Online (Sandbox Code Playgroud)
现在将包含代表Foo1和的部分Foo2.我想做的是用另一个IFoo实现替换它们.这就是我正在尝试的,我认为这会起作用:
var partsToRemove
= from part in container.Catalog.Parts
from exDef in part.ExportDefinitions
where exDef.ContractName == AttributedModelServices.GetContractName(typeof(IFoo))
select part.CreatePart();
var batch = new CompositionBatch(null, partsToRemove);
batch.AddPart(new Foo3());
container.Compose(batch);
Run Code Online (Sandbox Code Playgroud)
我期待container.Catalog.Parts改变以反映我的变化,但事实并非如此.它与首次创建容器时保持一致.
我错过了什么?这甚至是正确的方法吗?我已经阅读了Glenn Block关于使用ExportProviders的CodeBetter文章,但他提到他将编写第2部分,其中他将介绍如何实现过滤ExportProvider(可能更接近我需要做的事情).
我试图一起安装CodeRush和ReSharper.
安装ReSharper后,我的CodeRush快捷方式消失了.有没有人知道如何安装Resharper恢复我的CodeRush短裤?
这是我目前的设置:1.Visual Studio 2008 2.已安装的CodeRush XPress 10.1 3.已安装的ReSharper 5.1
我在具有8 GB RAM的Windows 7 x64计算机上安装,因此内存不会成为问题.
我对Moq来说比较新,并且有这个复杂的案例可以模拟并且有点困难.我希望有经验的Moq用户可以就此提出建议:
在我的ViewModel中,ctor正在调用这个load方法:
public void LoadCategories()
{
Categories = null;
BookDataService.GetCategories(GetCategoriesCallback);
}
Run Code Online (Sandbox Code Playgroud)
我想明显嘲笑服务.但是由于服务的方法是无效的,并且返回总是通过回调,因此对我来说太复杂了.
private void GetCategoriesCallback(ObservableCollection<Category> categories)
{
if (categories != null)
{
this.Categories = categories;
if (Categories.Count > 0)
{
SelectedCategory = Categories[0];
}
LoadBooksByCategory();
}
}
Run Code Online (Sandbox Code Playgroud)
因为这还不够糟糕,正如你所看到的,在调用LoadBooksByCategory()中有另一个LoadMethod
public void LoadBooksByCategory()
{
Books = null;
if (SelectedCategory != null)
BookDataService.GetBooksByCategory(GetBooksCallback, SelectedCategory.CategoryID, _pageSize);
}
private void GetBooksCallback(ObservableCollection<Book> books)
{
if (books != null)
{
if (Books == null)
{
Books = books;
}
else
{
foreach (var book in books)
{ …Run Code Online (Sandbox Code Playgroud) 我在我的MVC项目中使用Ninject 1.5.它运行良好,但由于我们有Ninject 2,我可以升级(并且另外使用每个请求行为,这在1.5中无法正常工作).Ninject 1.5具有InjectPropertiesWhere功能,在Ninject 2中缺失(至少在我前一段时间测试它时).有类似的东西吗?
示例InjectPropertiesWhere:
return Bind<IUserService>().To<UserService>()
.InjectPropertiesWhere(p => p.Name.EndsWith("Repository"))
.InjectPropertiesWhere(p => p.Name.EndsWith("Service"))
.InjectPropertiesWhere(p => p.Name == "ApplicationCache")
.InjectPropertiesWhere(p => p.Name == "CurrentPrincipal")
.InjectPropertiesWhere(p => p.Name == "CTEmailSender")
.InjectPropertiesWhere(p => p.Name == "CTSettings");
Run Code Online (Sandbox Code Playgroud) 我已经到了想要在我的ASP.NET应用程序中完成2个任务的地步,这两个任务都可以使用一些AOP框架来完成,但它们都具有不同的性质:
我创建了自定义属性NotNullAttribute并用它标记了一些方法的参数或属性,而不是ArgumentNullException在这些参数或属性为null时抛出.我希望AOP框架在编译时检查这些属性,并添加throw原因.示例如下:
//original code that I write
public void MyMethod([NotNull]string param1){
//do something
}
Run Code Online (Sandbox Code Playgroud)
.
//code actually being compiled - after AOF processing/weaning
public void MyMethod(string patam1){
if(param1 == null){
throw new ArgumentNullException("param1");
}
//do something
}
Run Code Online (Sandbox Code Playgroud)所以我想要框架(甚至不一定是AOP,但我想它必须是),这将允许我简单地完成这两项任务.
我有一些额外的要求:
Ctrl+F5编译,框架可以正常工作,注入依赖项,添加异常抛出代码,而我甚至不知道它.我不想从命令行或类似的东西运行预编译.有一些这样的框架吗?如果还有更多的优点/缺点?
编辑:哦,是的,我忘记了非常重要的想法:框架应该是免费的.
我有一个使用Asp.net MVC2的Web应用程序.我将它升级到MVC 3,现在我发现OutputCache功能不再起作用了.我创建了一个简单的Test动作,如下所示.
[OutputCache(Duration = 1000000, VaryByParam = "none")]
public virtual ActionResult CacheTest(string name)
{
string message = string.Format("{0}: Time is {1}", name, DateTime.Now.ToLongTimeString());
ViewData.Add("Message", message);
return View();
}
Run Code Online (Sandbox Code Playgroud)
这总是给出当前时间,表明它没有被缓存.我在这里错过了什么吗?
更多信息:如果我创建一个新的Mvc3应用程序,它工作正常.它只在升级的应用程序中,我有这个问题.
更新:我也在使用Ninject.如果我停止使用Ninject OutputCache开始工作.
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}.aspx/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } …Run Code Online (Sandbox Code Playgroud) 我有一个城堡核心的问题,我试图注入两个不同的数据库连接到特定的存储库.
public class Repository1 {
public Repository1(System.Data.Common.DbConnection conn) { }
}
public class Repository2 {
public Repository2(System.Data.Common.DbConnection conn) { }
}
Run Code Online (Sandbox Code Playgroud)
现在举例来说,我希望将Mysql连接注入Repository1,并将Oracle连接注入repository2.