gpt4 book ai didi

c# - 是否可以在 AutoFac 中获取容器类型

转载 作者:太空狗 更新时间:2023-10-29 21:30:34 27 4
gpt4 key购买 nike

例如,我在 System.Type 类型的构造函数中注册了一个带有一个参数的类 C1。我有另一个类 (C2),其中注入(inject)了 C1 类型的参数。我想在 C1 构造函数中自动接收 typeof(C2) 。这在某种程度上是可能的吗?

示例代码:

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());

地点:

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 参数,这些参数将只与具有特定名称的参数匹配。

请让我知道这是否有效,其他人也询问过相同的一般任务,这很适合与他们分享。

关于c# - 是否可以在 AutoFac 中获取容器类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4774286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com