问题(摘要)
给定一个注册依赖关系X的模块.依赖关系X在MVC3应用程序(每个HttpRequest的生存期)中具有不同的生命周期,然后在控制台应用程序中(具有名称的每个生命周期的依赖关系).在何处或如何指定依赖关系X的生命周期?
案件
我将所有与数据库相关的代码放在一个程序集中,其中包含一个注册所有存储库的模块.现在,ISession(Nhibernate)注册也在模块中.
ISession是依赖关系X(在给定的问题情况下).ISession在MVC3应用程序(每个请求的生命周期)中具有不同的生命周期,然后在控制台应用程序中定义命名的生命周期镜像.
ISession的注册是否应该在模块之外?会很奇怪,因为它是一个实现细节.
在这里做的最好的案例是什么?设计缺陷还是有智能结构:)
我尝试序列化一棵由 Craft 或 Reagent 组成的树:
[ProtoContract]
[ProtoInclude(1, typeof(Craft))]
[ProtoInclude(2, typeof(Reagent))]
public interface IReagent : IEquatable
{
[ProtoMember(1)]
int ItemId { get; set; }
[ProtoMember(2)]
int Quantity { get; set; }
}
[ProtoContract]
public class Reagent : IReagent
{
[ProtoMember(1)]
public int ItemId { get; set; }
[ProtoMember(2)]
public int Quantity { get; set; }
}
[ProtoContract]
public class Craft : IReagent
{
[ProtoMember(1)]
public int Skill { get; set; }
[ProtoMember(2)]
public Profession Profession { get; set; }
[ProtoMember(3)]
public …
Run Code Online (Sandbox Code Playgroud)Run Code Online (Sandbox Code Playgroud) 我有两个关于 Scala 中嵌套类型的问题。
想象一下我有这种特质;
trait ScanList[E] {
sealed trait Command
case object Recover extends Command
case class Remove(item: E) extends Command
sealed trait Event
case class Removed(item: E) extends Event
}Run Code Online (Sandbox Code Playgroud)
现在我想写一个通用特征,如下所示(问题在模式匹配中编码为注释):
trait ScanListProcessor[E] {
type SL = ScanList[E]
def process(msg: SL#Command) = {
msg match {
case u:SL#Remove => // how can instantiate SL#Removed here?
case SL#Recover => //cannot match on nested objects?
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用特征的原因是我可以派生 ScanList 的新实现。在这个特质中,我也有类似的操作def shouldProcess(item: E): Boolean。对于每个实现,ScanList[E]我想编写如上所述的通用行为。
SL#Removed …