首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack的Funq类型通过反射注册?

ServiceStack的Funq类型通过反射注册?
EN

Stack Overflow用户
提问于 2018-02-15 01:51:40
回答 1查看 219关注 0票数 2

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

代码语言:javascript
复制
container.Register(Classes.FromThisAssembly().BasedOn<IMyInterface>().LifestyleTransient());

因此,假设我有一堆用于数据格式化的提供程序-我可以用这一行注册所有这些提供程序(通过接口)。更好的是,当我创建新的脚本时(假设它们在相同的程序集中,相同的接口),它们也会被注册;在编写代码时,我就不需要记住这样做了。

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

EN

回答 1

Stack Overflow用户

发布于 2018-02-15 03:03:22

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

代码语言:javascript
复制
var fooTypes = assembly.GetTypes().Where(x => x.HasInterface(typeof(IFoo)));
container.RegisterAutoWiredTypes(fooTypes);

如果需要,可以使用以下命令进行检索:

代码语言:javascript
复制
 var fooInstances = fooTypes.Select(c.Resolve).Cast<IFoo>();

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

代码语言:javascript
复制
container.Register(c => fooTypes.Select(c.Resolve).Cast<IFoo>()); 

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

代码语言:javascript
复制
public IEnumerable<IFoo> FooInstances { get; set; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48793381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档