gpt4 book ai didi

c# - 希望 Autofac 不注册任何具有多个实现的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 18:00:05 28 4
gpt4 key购买 nike

我目前正在为我们公司测试 Autofac。

我们希望有以下规则:

  1. 如果接口(interface)只实现了一次,则使用 builder.RegisterAssemblyTypes 自动添加它(见下文)。

  2. 否则,我们需要确保手动编写规则来决定哪个实现是“默认”实现。

我有以下代码:

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly
.Load("Lunch.Service")).As(t => t.GetInterfaces()[0]);
builder.RegisterType<ConsoleLoggerService>()
.As<ILoggerService>().SingleInstance();
builder.RegisterModule(new DestinationModule());
builder.RegisterType<TransportationService>()
.As<ITransportationService>().PropertiesAutowired();

现在,它正在运行,但它会决定第一个实现是哪个并将自动创建它。我们想让它成为一个手动过程,如果我们不手动创建“规则”,就会抛出一个错误。这可能吗?

最佳答案

你可以这样做:

cb.RegisterAssemblyTypes(assembly).Where(type =>
{
var implementations = type.GetInterfaces();

if (implementations.Length > 0)
{
var iface = implementations[0];

var implementers =
from t in assembly.GetTypes()
where t.GetInterfaces().Contains(iface)
select t;

return implementers.Count() == 1;
}

return false;
})
.As(t => t.GetInterfaces()[0]);

这将注册只有一个实现者存在的所有实现,并忽略具有多个实现的接口(interface),因此您可以手动注册它们。请注意,我并不是说这在任何方面都是有效的(取决于服务的数量,例如,您可能想要查看缓存实现器)。

关于c# - 希望 Autofac 不注册任何具有多个实现的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486342/

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