2016-02-25 4 views
3

В инфраструктуре сущности класс DbContext реализует интерфейс IObjectContextAdapter. Когда я смотрю внутрь этого интерфейса я вижу, что есть только одно свойствоПочему DbContext реализует IObjectContextAdapter, но не имеет общедоступного свойства ObjectContext

ObjectContext ObjectContext {get;} 

Но сам DbContext класс не имеет это свойство. В настоящее время:

  1. Как это работает? Должен ли компилятор заставить класс DbContext иметь общедоступное свойство ObjectContext?
  2. Или по-другому: почему мне нужно отправить DbContext в ObjectContextAdapter, чтобы получить доступ к свойству ObjectContext.

Что здесь происходит?

ответ

3

Это пример явной реализации интерфейса.

Так теоретически понять, что увидеть этот пример

interface IExplicit 
{ 
    void Explicit(); 
} 

class Test : IExplicit 
{ 
    void IExplicit.Explicit() 
    { 
    //some implementation goes here 
    } 
} 

Теперь мы можем создавать новый Test(), но доступ к IExplicit реализации мы должны бросить тип как

var testobj = new Test(); 

**will throw Compile time error. 
testobj.Explicit(); 

**We can do. 
((IExplicit)testobj).Explicit(); 

так что теперь ближайшие к вашей фактической реализации dbcontext

DbContext явно реализовал это свойство. Для того, чтобы быть доступным, экземпляр должен быть отправлен на его интерфейс.

public class DbContext : IObjectContextAdapter 
{ 
    ObjectContext IObjectContextAdapter.ObjectContext 
    { 
    get 
     { 
     ... 
     } 
    } 
} 

Вы можете найти документацию явного интерфейса здесь msdn.

+0

Хмм, таким образом я обнаружил, что существует понятие реализации Явного интерфейса. Спасибо. –

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