C# Func<;类型>;工厂。I';我不确定在下面的例子中这是做什么的

C# Func<;类型>;工厂。I';我不确定在下面的例子中这是做什么的,c#,C#,我在一些代码中看到了这一点: class BlahService: ResolverThingy { private IBlahData blahData => this.ResolveDependency<IBlahData>(); BlahService(Func<IBlahData> blahDataFactory)() { } } 是否要延迟IBlahData类型的内存声明?它只是将委托传递给构造函数,以便在运行时解析IB

我在一些代码中看到了这一点:

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

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

是否要延迟IBlahData类型的内存声明?

它只是将委托传递给构造函数,以便在运行时解析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
    }
}
class BlahService:ResolverThingy
{
private Func blahData=>ResolveDependency();
公共BlahService(Func blahDataFactory)
{
this.blahData=blahDataFactory;
}
//用法
公共方法()
{
var blahDataImpl=this.blahData();
//现在您可以使用blahDataImpl了
}
}

这不是
private Func blahData=>this.ResolveDependency()
private IBlahData blahData=>this.ResolveDependency()这不是有效的c代码。它是一个委托。你可以在这里得到完整的信息——那么我认为它更像是一个节省内存的工具,对吗?所以IBlahData在需要时才被解析?不,它被称为“依赖注入”@Jimmyt1988不,我不认为这是在节省内存。正如@Jefferson提到的,这是一种依赖注入,特别是构造函数注入。我不知道为什么选择这种风格,而不是注入实现,注入
“工厂方法”
,它将解决
BlahsService
的依赖关系。
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
    }
}