我有一个后台线程在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适用于控制器。知道如何为后台线程做这件事吗?
答案 0 :(得分:1)
您需要从容器中获取对象,而不是自己调用构造函数。
enquiries = ObjectFactory.GetInstance<Enquiry >();
您通常只想在应用程序中的某个位置调用容器。这个地方就是你所说的Composition root。