草庐IT

container

全部标签

c# - List<T>.Contains() 是线程安全调用 - C#

我的理解是,如果您在C#中使用泛型列表(List),那么它可以支持多个并发读取器,但只能支持一个写入器。当您将编写器引入混合时,您还必须提供同步结构以使操作线程安全。List.Contains是否被视为读取操作?换句话说,如果我调用这个方法,我是否需要担心写入者可能同时写入这个列表? 最佳答案 是的,你应该。基本上,如果列表可能同时用于写入,我会同步任何操作。一般来说,我发现集合分为两类-一种是创建、初始化然后再也不会更改(线程安全),另一种是随着时间的推移而发生变化(非线程安全,所有访问都锁定)。

c# - IFilterProvider 和关注点分离

我有一种情况需要在操作过滤器中注入(inject)一些依赖项,即我的自定义授权属性中的自定义授权提供程序。我偶然发现很多人和帖子都在说我们应该将“属性元数据”与“行为”分开。这是有道理的,还有一个事实是过滤器属性没有通过“DependencyResolver”实例化,因此很难注入(inject)依赖项。所以我对我的代码做了一些重构,我想知道我是否做对了(我使用CaSTLeWindsor作为DI框架)。首先,我剥离了我的属性,只包含我需要的原始数据[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]publicc

c# - T[].Contains for struct 和 class 表现不同

这是一个后续问题:List.ContainsandT[].ContainsbehavingdifferentlyT[].Contains当T时表现不同是类和结构。假设我有这个结构:publicstructAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother)//在这里,通用Equals如我所料被正确调用。但是对于类:publicclassAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother){return

c# - List.Contains() 的循环实现看起来比内置的更快。是吗?如果是这样,为什么?

(Thisquestionarisesfromadiscussionthatstartedhere)我正在比较寻找true的时间List中的值使用List.Contains()与那些用于手卷循环。我看到的结果与其他人报告的结果不同。我已经在几个系统上试过了,在我试过的所有系统上,循环似乎快了2到3.5倍。这些系统的范围从使用.Net4运行XP的5年前笔记本电脑到最近运行Windows8和.Net4.5的PC。其他人报告了不同的结果,即List.Contains()与循环的速度大致相同或略快。这是我的测试代码。usingSystem;usingSystem.Collections.Gen

c# - NHibernate 3.1 NHibernate.Linq.NhRelinqQueryParser 异常 "Sequence contains more than one matching element"

我正在使用Nhibernate3.1/FluentNhibernate1.2当我使用CTRL+F5在Release模式下工作时,我没有遇到任何异常。但是在使用F5的Debug模式下会发生以下异常:此代码的控制台应用程序:_Session.Query().Where(x=>x.Bar=="bar").FirstOrDefault()异常(exception):System.TypeInitializationExceptionwasunhandledMessage=Thetypeinitializerfor'NHibernate.Linq.NhRelinqQueryParser'thre

c# - 根据类型和参数列表删除 ifs

我想重构以下递归方法:publicstaticvoidInitialize(Controlcontrol,DocumentContainercontainer,ErrorProviderprovider){if(control==null){return;}varcontrolWithTextBase=controlasICustomControlWithText;if(controlWithTextBase!=null){controlWithTextBase.DocumentLoaded=true;controlWithTextBase.Initialize(container,p

c# - 如何使用 WebAPI、WCF、SignalR 和后台任务在 MVC Web 应用程序中配置简单的注入(inject)器容器和生活方式

简单的注入(inject)器文档提供了关于如何为WebRequest、WebAPI、WCF等设置容器的很好的示例,但这些示例一次只针对一种技术/生活方式。我们的Web应用程序同时使用了其中的大部分!我不清楚如何配置容器以适应多种生活方式。假设我有一个带有WebAPI的MVC项目。我有以下对象:MyDbContext:我的实体代码优先数据库上下文由MyDataProvider实现的IMyDataProvider:包含查询逻辑并使用MyDbContextMyController:使用IMyDataProvider的MVCControllerMyApiController:使用IMyData

c# - 如何使用简单注入(inject)器模拟模块/安装程序/注册表

Autofac有模块,Windsor有Installers和StructureMapRegistries...使用SimpleInjector如何将配置逻辑打包到可重用的类中?我试过:publicinterfaceIModule{}publicclassFooModule:IModule{publicFooModule(SimpleInjector.Containercontainer){container.RegisterSingleton();container.RegisterSingleton();}}我在CompositionRoot中使用它:publicstaticvoid

c# - 使用 PLinq 列出 Contains()?

假设我有一个大列表ListlongList=newList(10000000)我想做以下查询:boolfound=longList.Contains(4345235234524245124L);有没有办法使用PLinq让每个线程只搜索列表的一小部分?我知道在这种情况下使用Dictionary或HashMap会更好。这正是我想了解的有关PLinq的信息,这个示例非常方便。 最佳答案 是的,使用boolfound=longList.AsParallel().Contains(4345235234524245124L);确实应该将其并行化

c# - MVC 和 Web API Controller 的简单注入(inject)器初始化

我有一个WebAPIController,其中包含一些资源DI。出于以后的需要,我添加了一个MVCController,现在我也需要在那里DI的相同资源。这是我的原始配置:[assembly:WebActivator.PostApplicationStartMethod(typeof(CineplexSearch.App_Start.SimpleInjectorWebApiInitializer),"Initialize")]namespaceCineplexSearch.App_Start{usingSystem.Web.Http;usingSimpleInjector;usingS