某些服务类型具有非常明确的生命周期要求。例如,如果在ASP.NET应用程序中使用EntityFramework,则很明显DbContext
生命周期应该与请求相关联。但是,有些服务是“无状态的”:它们不存储任何状态,而只是将指令转发给它们的依赖项。一个简单的例子是Query
对象:
public class MyQuery : IQuery<SomeQuery, SomeResponse> {
private readonly IRepository<MyTable> Repository; // Injected via constructor
public SomeResponse Query(SomeQuery query) {
return Repository.All().Where(r => r.Field == query.Field)
.Select(r => new SomeResponse { Field = r.Field }).Single();
}
}
除了依赖项强加的类之外,这个特殊类本身没有任何要求。应该使用什么准则来确定为这种类型的对象选择的生命周期?应该尽可能使用瞬态寿命吗?或者应该有一个最长的寿命?为什么?