创建OwinContext

时间:2014-05-05 15:41:28

标签: c# entity-framework

在新模板中,owin上下文的创建方式如下:

public void ConfigAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(ApplicationDbContext.Create);
}

但似乎这样做会更容易:

public void ConfigAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(() => new ApplicationDbContext());
}

有没有理由做第一个?

1 个答案:

答案 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。这称为界面隔离或松散耦合。