ReSharper建议我通过改变这个来改变类型参数T contravariant:
interface IBusinessValidator<T> where T: IEntity
{
void Validate(T entity);
}
Run Code Online (Sandbox Code Playgroud)
进入:
interface IBusinessValidator<in T> where T: IEntity
{
void Validate(T entity);
}
Run Code Online (Sandbox Code Playgroud)
那么<T>
和之间有什么不同<in T>
?这里逆变的目的是什么?
让说我有IEntity
,Entity
,User
和Account
实体.假设双方User
和Account
有Name
需要验证属性.
如何在此示例中应用逆变的用法?
总的来说,我知道有三种大型的设计模式
但我不知道我可以将Repository模式放入哪种类型.
存储库模式是否属于以上三种类型之一?或者它是在(2)和(3)模式的中间?
我已经潜入研究SQL CLR.不幸的是,我的第一个例子有透明代码调用安全代码的问题.
关键是我的SQL CLR触发器被视为透明代码.在触发器中,我使用Quartz来调用Quartz Windows服务:
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = string.Format("tcp://{0}:{1}/{2}", "localhost", "555",
"QuartzScheduler");
var schedulerFactory = new StdSchedulerFactory(properties);
IScheduler scheduler = schedulerFactory.GetScheduler();
Run Code Online (Sandbox Code Playgroud)
错误:
(135,1):SQL72014:.Net SqlClient数据提供程序:消息6522,级别16,状态1,过程AfterMarketSessionInserted,第1行在执行用户定义的例程或聚合"AfterMarketSessionInserted"期间发生.NET Framework错误:System.MethodAccessException :尝试通过安全透明方法 '.Database.Triggers.MarketSessionTriggers.AfterMarketSessionInserted()' 访问安全关键方法 'Quartz.Impl.StdSchedulerFactory..ctor(System.Collections.Specialized.NameValueCollection)' 失败.
程序集"数据库,版本= 1.0.5275.15169,Culture = neutral,PublicKeyToken = null"部分受信任,这使得CLR使其完全安全透明,而不管程序集本身是否有任何透明度注释. 为了访问安全关键代码,必须完全信任此程序集. System.MethodAccessException:at Database.Triggers.FinancialMarketSessionTriggers.AfterFinancialMarketSessionInserted()
--------------
为什么SQL CLR触发器代码被视为透明代码并且部分受信任?
如何使SQL CLR触发器代码不是透明代码或使其完全受信任?
我愿意接受建议.
当我读到Deep Null检查时,会出现这种担忧 ,有没有更好的方法?
还有这个
假设我想检查所有属性是否为null或者是否有任何属性为null.(浅物业)
SearchCriteria对象:
Keyword (Searches Name and Description) != null ||
SectorId != null ||
IndustryId != null ||
HasOption != null ||
HasFutures != null ||
30 properties to go...
Run Code Online (Sandbox Code Playgroud)
我们可以看到,语法在某种程度上难以阅读.我想要类似的东西
SearchCriteria
.Has(criteria => criteria.Keywork)
.Has(criteria => criteria.SectorId)
.Has(criteria => criteria.HasOption)
.etc
Run Code Online (Sandbox Code Playgroud)
(如果我们想要以上所有属性都不为null)
要么
SearchCriteria
.Has(criteria => criteria.Keywork).Or()
.Has(criteria => criteria.SectorId).Or()
.Has(criteria => criteria.HasOption).Or()
.etc
Run Code Online (Sandbox Code Playgroud)
(如果我们想要任何属性为非null)
要么
SearchCriteria
.Has(criteria => criteria.Keywork).Or()
.Has(criteria => criteria.SectorId)
.Has(criteria => criteria.HasOption)
.etc
Run Code Online (Sandbox Code Playgroud)
(如果我们想要Keyword 或 SectorId具有值并且 …
我是安全方式和.NET安全方式的新手.我看到了很多关于声明和发行人等的内容,但我对这个定义感到困惑.
简单的英语,索赔是什么?索赔中的发行人/原始发行人是什么?
首先,我有这个代码,如果满足条件,它将打破第二个循环.
因此,例如,如果第一次满足条件,则不会枚举第二循环的其他元素.
foreach (var evaluator in strategyEvaluators)
{
foreach (var rule in concatedRules)
{
var isEntryRuleMet = evaluator.Evaluate(rule.Code);
if (isEntryRuleMet)
{
matchedNames.Add(evaluator.Name);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我也发现代码可以通过这种方式缩短:
foreach (var evaluator in strategyEvaluators)
{
if (concatedRules.Select(rule=> evaluator.Evaluate(rule.Code)).Any(isEntryRuleMet => isEntryRuleMet))
{
matchedNames.Add(evaluator.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,对于第二种方式,我不知道该Select
方法将运行多少次.
是Select
右后停止Any
返回true?或者它是否已完成运行然后Any
运行?
c# ×4
security ×2
.net ×1
claims ×1
linq ×1
oop ×1
repository ×1
resharper ×1
sql-server ×1
sqlclr ×1
wcf-security ×1