目前还没有关于DI主题的文档 –
Dependency Injection.有人可以帮助我了解以下内容:
>这些注册有什么区别?
public void ConfigureServices(IServiceCollection services) { services.AddTransient<IService,Service>(); services.AddScoped<IService,Service>(); services.AddSingleton<IService,Service>(); services.AddInstance(service); }
>使用内置DI的现有解决方案(NInject,Autofac,Structure Map)有什么优缺点?
>默认依赖注入的当前限制是什么(如果有)?
解决方法
对于遵循SOLID原则的任何相当大尺寸应用的产品开发,vNext的内置DI容器将无用,因为:
>它不能帮助您验证您的配置,使其非常难以诊断来自常见配置错误的问题,例如Captive Dependencies.在合理大小的应用程序中,实际上很难自己发现这些错误。
>使用拦截器或decorators应用交叉问题是不可能的。这使得维护任何合理大小的应用程序真的很贵。
>尽管它支持将打开的通用抽象映射到打开的通用实现,但它无法使用类型约束的泛型类型。
内置容器还有其他限制,例如只能支持具有单个构造函数的类型,但这是一个非常合理的默认值,因为your injectables should only have a single constructor anyway.由于rc1现在有一些多操作符支持。
如果您从一个新的和简单的项目开始,我的建议是应用Pure DI(这意味着手机组件,而不使用容器),并通过插入your custom IControllerActivator来解决您的类型。之后,当批处理注册和装饰将提高composition root的可维护性,切换到符合您要求的已建立的DI库之一。