Azure Web角色中后台线程的Structuremap构造函数注入

时间:2013-09-14 07:00:39

标签: c# entity-framework dependency-injection structuremap azure-web-roles

我有一个后台线程在Windows Azure Web角色中定期运行:

enquiries = new Enquiry();
Thread enqThread = new Thread(enquiries.Start);
enqThread.Start();

查询使用Entity Framework 5.0 DbContext从数据库中提取查询记录。 我想使用Structuremap在其构造函数中注入DbContext。我这样做,

public class Enquiry {

    private readonly IMySiteDb _db;

    public Enquiry(IMySiteDb db)
    {
        _db = db;
    }

    /*
    Then some methods like Init(), Start(), Execute() etc.
    */
}

我安装了structuremap.mvc并初始化了objectfactory容器:

x.For<IMySiteDb>().HttpContextScoped().Use<MySiteDb>();

但是发起 queries = new Inquiry(); 会抛出错误 - 查询不包含带0参数的构造函数

我对依赖注入很新,但无法找到适用于此类方案的方法。该DI适用于控制器。知道如何为后台线程做这件事吗?

1 个答案:

答案 0 :(得分:1)

您需要从容器中获取对象,而不是自己调用构造函数。

enquiries = ObjectFactory.GetInstance<Enquiry >();

您通常只想在应用程序中的某个位置调用容器。这个地方就是你所说的Composition root