我正在尝试在以下场景中使用autofac:
一种WCF服务,在每次方法调用时,都会接收用于打开数据库连接的连接详细信息
(即public UserDTO GetUser(string dbUsername, string dbPassword, int userId)
。
由于打开数据库连接对所有方法都是通用的,我想使用IParameterInspector
来拦截每个方法调用,提取连接细节,并初始化连接。
我的问题是 -
1.我不知道是否(以及如何)将必要的工厂注入我的IParameterInspector
2.一旦我创建了连接,我不确定如何将其注册到我的容器中,以便该请求的所有组件都可以使用它。
我的IParameterInspector
:
public object BeforeCall(string operationName, object[] inputs)
{
var userName = inputs[0] as Guid?;
var password = inputs[1] as string;
// How do I inject the ConnectionsFactory?
var connection = ConnectionsFactory.CreateConnection(userName, password);
// How can I register my connection in the container, so that it'll be available to all dependencies created in this call?
return null;
}
感谢
答案 0 :(得分:0)
好的,想通了 -
我的问题是在我的服务类实例化之后调用了IParameterInspector
。很明显,这不是初始化的地方。
实现IInstanceCreator
被证明是正确的做法,因为它在创建服务类之前调用,并且实际上用于告诉WCF如何创建服务类。
我刚刚创建了一个autofac Lifetime Scope ,并使用它注册了我的数据库连接。