例如,我在类型的构造函数中使用一个参数注册了类 C1System.Type
。我有另一个类(C2),其中注入了 C1 类型的参数。我想收到typeof(C2)
自动在 C1 构造函数中。以某种方式有可能吗?
示例代码:
public class C1
{
public C1(Type type) {}
// ...
}
public class C2
{
public C2(C1 c1) {}
// ...
}
// Registration
containerBuilder.Register(???);
containerBuilder.Register<C2>();
这应该可以做到:
builder.RegisterType<C1>();
builder.RegisterType<C2>();
builder.RegisterModule(new ExposeRequestorTypeModule());
Where:
class ExposeRequestorTypeModule : Autofac.Module
{
Parameter _exposeRequestorTypeParameter = new ResolvedParameter(
(pi, c) => c.IsRegistered(pi.ParameterType),
(pi, c) => c.Resolve(
pi.ParameterType,
TypedParameter.From(pi.Member.DeclaringType)));
protected override void AttachToComponentRegistration(
IComponentRegistry registry,
IComponentRegistration registration)
{
registration.Preparing += (s, e) => {
e.Parameters = new[] { _exposeRequestorTypeParameter }
.Concat(e.Parameters);
};
}
}
任何需要一个System.Type
参数将获取传递给它的请求者的类型(如果有)。可能的改进可能是使用NamedParameter
而不是TypedParameter
来限制Type
仅与具有特定名称的参数相匹配。
请让我知道这是否有效,其他人已经询问了相同的一般任务,这将很好地与他们分享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)