2014-05-05 5 views
0

В новых шаблонах, то Owin контексты создаются так:Создания OwinContext

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

Но, похоже, было бы легче сделать это:

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

Есть ли какая-либо причина сделать первый?

ответ

1

Подпись, ожидаемая от метода расширения CreatePerOwinContext, - Func<T>.

() => new ApplicationDbContext() имеет подпись Func<T> и может удовлетворить подпись.

ApplicationDbContext.Create также имеет подпись Func<T> и может также использоваться.

Разница заключается в том, что в первом примере вы создаете анонимный метод для возврата подписи. Во втором случае подпись метода уже предоставлена ​​для вас. Они в значительной степени функционально эквивалентны, подобно тому, как вы можете подключить анонимный метод, созданный лямбда-выражениями, до event в C# или использовать метод, который удовлетворяет подписи.

Что касается рассуждений, Owin агностика к какой-либо конкретной технологии и предназначен для обеспечения разработки приложений с рыхлой связью между приложением и хостингом приложения (IIS против Katana против ???). В результате OWIN не знает о (или не заботится) о Entity Framework, и поэтому Entity Framework создала метод с подписью для подключения к OWIN. Это называется сегрегацией интерфейса или ослабленной связью.

+1

Вот что я понял, но я рад, что ничего не пропустил! Я люблю анонимные методы - это давайте мне писать меньше строк кода! – William

Смежные вопросы