尽管我同意大多数其他答案,但我无法真正谈论您应该如何重新构建控制器 - 60 个传入参数已经很多了。
可能有助于减少参数数量但不会减少依赖项数量的东西是聚合服务支持 https://code.google.com/p/autofac/wiki/AggregateServiceAutofac 有。
您可以采用包含 60 个属性的单个聚合参数,而不是直接采用 60 个参数。
您使用依赖项创建一个接口(只是接口,实际上不必实现它):
public interface IMyAggregateService
{
IFirstService FirstService { get; }
ISecondService SecondService { get; }
IThirdService ThirdService { get; }
IFourthService FourthService { get; }
}
然后修改您的控制器以采用该聚合接口:
public class SomeController
{
private readonly IMyAggregateService _aggregateService;
public SomeController(
IMyAggregateService aggregateService)
{
_aggregateService = aggregateService;
}
}
您可以注册聚合服务接口、依赖项和控制器,当您解析控制器时,聚合服务接口将自动为您实现和解析。
var builder = new ContainerBuilder();
builder.RegisterAggregateService<IMyAggregateService>();
builder.Register(/*...*/).As<IFirstService>();
builder.Register(/*...*/).As<ISecondService>();
builder.Register(/*...*/).As<IThirdService>();
builder.Register(/*...*/).As<IFourthService>();
builder.RegisterType<SomeController>();
var container = builder.Build();
再说一遍,它并没有涉及需要那么多依赖项的更大问题,但如果您只是想简化构造函数和控制器上的属性数量,使其更易于管理,这是 Autofac 提供的一种策略可以帮助您解决这一问题。 。
查看 wiki 页面了解更多详细信息。 https://code.google.com/p/autofac/wiki/AggregateService