2

我用过很多次温莎城堡。它有一个非常方便的工具,可以通过反射注册类型。例如,我会在应用程序启动时做这样的事情:

container.Register(Classes.FromThisAssembly().BasedOn<IMyInterface>().LifestyleTransient());

所以,假设我有一堆数据格式提供者——我可以用那一行注册它们(通过接口)。更好的是,当我创建新的(假设它们在同一个程序集和同一个界面中)时,它们也会被注册;在编码它们时,我不必记住这样做。

ServiceStack 的 Funq 容器实现中是否有等价物?我环顾四周,似乎没有看到一个。

4

1 回答 1

1

一个接口只能有一个实现,但如果您想通过扫描查找所有类型并预先注册它们来注册实现接口的所有具体类型:

var fooTypes = assembly.GetTypes().Where(x => x.HasInterface(typeof(IFoo)));
container.RegisterAutoWiredTypes(fooTypes);

如果需要,可以通过以下方式全部检索:

 var fooInstances = fooTypes.Select(c.Resolve).Cast<IFoo>();

也可以将其注册为依赖项本身:

container.Register(c => fooTypes.Select(c.Resolve).Cast<IFoo>()); 

您的类可以使用属性注入访问:

public IEnumerable<IFoo> FooInstances { get; set; }
于 2018-02-14T19:03:22.150 回答