2015-09-23 1 views
2

Я видел это в какой-то код:Func <Type> завод. Я не уверен, что это делает в следующем примере

class BlahService: ResolverThingy 
{ 
    private IBlahData blahData => this.ResolveDependency<IBlahData>(); 

    BlahService(Func<IBlahData> blahDataFactory)() 
    { 
    } 
} 

Что это пытается сделать ... Я привык к прокладке мой код, словно это:

class BlahService: ResolverThingy 
{ 
    private IBlahData insightData; 

    BlahService(IBlahData blahDataFactory)() 
    { 
     this.insightData = blahDataFactory 
    } 
} 

ли отложить объявление памяти о IBlahData типа?

+1

Это не 'частный Func blahData => this.ResolveDependency ();'? – Michael

+0

'private IBlahData blahData => this.ResolveDependency ();' это недействительный код C#. –

+0

Его делегат. Вы можете получить полную информацию здесь - https://msdn.microsoft.com/en-us/library/bb534960(v=vs.110).aspx –

ответ

2

Он просто передает делегат конструктору для разрешения типа (реализации) IBlahData во время выполнения.

class BlahService: ResolverThingy 
{ 
    private Func<IBlahData> blahData => ResolveDependency<IBlahData>(); 

    public BlahService(Func<IBlahData> blahDataFactory) 
    { 
     this.blahData = blahDataFactory; 
    } 

    // usage 
    public void SomeMethod() 
    { 
     var blahDataImpl = this.blahData(); 
     // now you can use blahDataImpl 
    } 
} 
+0

Так ли я прав, думая, что это больше инструмент сохранения памяти? так что IBlahData не будет разрешен до тех пор, пока это не понадобится? – Jimmyt1988

+2

Нет, это называется «инъекция зависимостей» – JeffRSon

+0

@ Jimmyt1988 Нет. Я не думаю, что это экономит память. Как сказал @JeffRSon, это инъекция зависимостей, в частности, инъекция конструирования. Я не уверен, почему этот стиль был выбран, вместо того, чтобы вводить реализацию, вводя «метод Factory», который будет разрешать зависимости для «BlahService». – Michael

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