我目前正在处理的项目在类中的每个方法中使用IDisposable对象。在每个方法的开头都开始繁琐地重新输入使用块,并且想知道是否有办法在类的每个方法中指定一个一次性变量?
public static class ResourceItemRepository
{
public static ResourceItem GetById(int id)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
public static List<ResourceItem> GetInCateogry(int catId)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
public static ResourceItem.Type GetType(int id)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
}
答案 0 :(得分:13)
不,没有什么特别针对这一点。你可以写:
public static ResourceItem GetById(int id)
{
WithDataContext(db =>
{
// Code goes here...
});
}
// Other methods here, all using WithDataContext
// Now the only method with a using statement:
private static T WithDataContext<T>(Func<TestDataContext, T> function)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
return function(db);
}
}
我不确定它是否会特别有益。
(请注意,我必须将原始版本中的Action<TestDataContext>
更改为Func<TestDataContext, T>
,因为您希望能够从方法中返回值。)
答案 1 :(得分:3)
坦率地说,我会保留详细的代码,但每次使用代码片段而不是全部输入代码。 使用special tool创建自己的代码段或使用Texter等文本替换工具
答案 2 :(得分:0)
也许简单的重构是最好的,你可以做到而不诉诸PostSharp之类的东西:
public static class ResourceItemRepository {
public static ResourceItem GetById(int id) {
using (var db = CreateDataContext()) {
// Code goes here...
}
}
public static List<ResourceItem> GetInCateogry(int catId) {
using (var db = CreateDataContext()) {
// Code goes here...
}
}
public static ResourceItem.Type GetType(int id) {
using (var db = CreateDataContext()) {
// Code goes here...
}
}
private static TestDataContext CreateDataContext() {
return DataContextFactory.Create<TestDataContext>();
}
}