传递参数以进行延迟实例化

PJD*_*JDW 3 c# parameter-passing lazy-initialization

给定以下代码片段,如何将成员变量传递_tenantContext到Lazy<CloudBlobContainer>构造函数中?

public class BlobStorage : IStorage
{
    private readonly ITenantContext _tenantContext;

    public BlobStorage(ITenantContext tenantContext)
    {
        _tenantContext = tenantContext;
    }

    private readonly Lazy<CloudBlobContainer> _blobcontainer = new Lazy<CloudBlobContainer>(() =>
    {
        var connectionString = ConfigurationManager.ConnectionStrings["FileStorage"].ConnectionString;
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer blobContainer = blobClient.GetContainerReference("attachments");
        blobContainer.CreateIfNotExists();

        return blobContainer;
    });
Run Code Online (Sandbox Code Playgroud)

Dan*_*bes 7

我相信这会起作用:

public class Foo
{
    private readonly object _bar;
    private readonly Lazy<int> _lazyInt; 

    public Foo(object bar)
    {
        _bar = bar;
        _lazyInt = new Lazy<int>(() => GetLazyObject(_bar));
    }

    private static int GetLazyObject(object init)
    {
        return init.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)