在新模板中,owin上下文的创建方式如下:
public void ConfigAuth(IAppBuilder app)
{
app.CreatePerOwinContext(ApplicationDbContext.Create);
}
但似乎这样做会更容易:
public void ConfigAuth(IAppBuilder app)
{
app.CreatePerOwinContext(() => new ApplicationDbContext());
}
有没有理由做第一个?
答案 0 :(得分:1)
CreatePerOwinContext
扩展方法的预期签名为Func<T>
。
() => new ApplicationDbContext()
的签名为Func<T>
,可以满足签名。
ApplicationDbContext.Create
也有Func<T>
的签名,也可以使用。
不同之处在于,在第一个示例中,您将创建一个匿名方法来返回签名。在第二种情况下,已经为您提供了方法签名。它们在功能上几乎相同,就像你可以将lambda表达式创建的匿名方法挂钩到C#中的event
一样,或者使用满足签名的方法。
至于推理, OWIN 对任何特定的技术都是不可知的,并且旨在允许开发应用程序与app和托管应用程序之间的松散耦合(IIS vs Katana vs ???) 。因此,OWIN不了解(或关心)Entity Framework,因此Entity Framework已经创建了一个带有签名的方法来插入OWIN。这称为界面隔离或松散耦合。