Autofac - 将带有 NamedParameter 的键控服务注入构造函数
Autofac - Injecting Keyed service with NamedParameter into constructor
我在 Autofac 中注册了一个 Keyed 服务,我想通过构造函数注入它。
服务已注册
builder.Register((ctx, par) =>
{
var namedParameter = par.Named<string>("myNamedParameter");
... configuration and instantiation ...
}).Keyed<IMyService>(myKey);
目前正在明确解决
public class MyConsumer {
private readonly IMyService _myService;
//current
public MyConsumer(ILifetimeScope scope) {
_myService = _scope.ResolveKeyed<IMyService>(myKey, new NamedParameter("myNamedParameter", "parameterValue"));
}
//preferred
public MyConsumer(IMyService myService) {
_myService = myService;
}
}
但是,我一直没能找到在构建过程中注入上述服务的方法。 Autofac 的 KeyFilterAttribute
只接受一个键;它似乎不允许 NamedParameters
。这可能吗?
NamedService
是 KeyedService
的特殊版本,其中键的类型为 String
.
两个
c.RegisterType<T>().Named<IT>("x");
c.RegisterType<T>().Keyed<IT>("x");
是等价的。
您可以使用
public MyConsumer([KeyFilter("x")]IMyService myService) {
_myService = myService;
}
它将解析类型为 IMyService
的名为 "x"
的服务
我在 Autofac 中注册了一个 Keyed 服务,我想通过构造函数注入它。 服务已注册
builder.Register((ctx, par) =>
{
var namedParameter = par.Named<string>("myNamedParameter");
... configuration and instantiation ...
}).Keyed<IMyService>(myKey);
目前正在明确解决
public class MyConsumer {
private readonly IMyService _myService;
//current
public MyConsumer(ILifetimeScope scope) {
_myService = _scope.ResolveKeyed<IMyService>(myKey, new NamedParameter("myNamedParameter", "parameterValue"));
}
//preferred
public MyConsumer(IMyService myService) {
_myService = myService;
}
}
但是,我一直没能找到在构建过程中注入上述服务的方法。 Autofac 的 KeyFilterAttribute
只接受一个键;它似乎不允许 NamedParameters
。这可能吗?
NamedService
是 KeyedService
的特殊版本,其中键的类型为 String
.
两个
c.RegisterType<T>().Named<IT>("x");
c.RegisterType<T>().Keyed<IT>("x");
是等价的。
您可以使用
public MyConsumer([KeyFilter("x")]IMyService myService) {
_myService = myService;
}
它将解析类型为 IMyService
"x"
的服务