我用过很多次Castle Windsor。它有一个非常方便的工具,可以通过反射注册类型。例如,我会在应用程序启动时这样做:
container.Register(Classes.FromThisAssembly().BasedOn<IMyInterface>().LifestyleTransient());因此,假设我有一堆用于数据格式化的提供程序-我可以用这一行注册所有这些提供程序(通过接口)。更好的是,当我创建新的脚本时(假设它们在相同的程序集中,相同的接口),它们也会被注册;在编写代码时,我就不需要记住这样做了。
在ServiceStack的Funq容器的实现中有没有等价物?我环顾了四周,似乎没有看到一个。
发布于 2018-02-15 03:03:22
一个接口只能有一个实现,但是如果你想注册所有的具体类型,通过扫描找到所有类型并预先注册它们来实现一个接口:
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; }https://stackoverflow.com/questions/48793381
复制相似问题