laravel-依赖性注入和IoC容器
我试图将依赖性注入和IOC容器缠住,并以UserController为例.我正在使用app :: bind()在其构造函数中定义userController依赖其构造函数,然后将这些对象绑定到它.如果我使用的是输入:: get()立面/方法/事物,我不利用我刚刚注入的请求对象吗?现在,我应该使用以下代码,现在注入请求对象或do ininput :: get()解析为同一请求实例?我想使用静态外墙,但如果他们决心未注射的对象. $this->request->get('email'); 依赖注入
0 2023-05-28
编程技术问答社区
服务定位、依赖注入(和容器)和反转控制
我已经编程了一段时间,但从来没有对从理论上知道每个概念的含义,我可能正在使用各种编程概念,但不知道它. 服务定位器: 对我来说,是指捷径记录,以减少代码量来加快开发的速度.一个问题是:定位器可能仅参考名称空间/类,或者我可以具有变量注册表? 这是我对此的理解: $locator = new ServiceLocator() $locator->set('app', new System\Application()); $locator->set('db', new System\Pdo()); // Get the objects $locator->get('db')->connect(); $locator->get('app')->run(); 依赖注入(和依赖注入容器): 在对象中注入对象,无论出厂模式如何,都可以更快地访问这些对象.和di容器? 这是我对此的理解: $app = new System\Application(System\Co
《拉威尔》中的反射是如何工作的?
Laravel中的反射实际上是如何工作的? 我试图调试它,以了解Laravel如何在控制器的构造函数或方法中使用反射来解决其依赖性和亚依赖性,然后再将其还给我们. ,但我发现这很难,看到甚至了解的50%非常复杂.跳到课上,我真的看不到它.我尝试了几次,以较低的理解结果调试. 我对此给我留下了深刻的印象,而拉拉维尔的使用方式使我的心脏燃烧 - 它只是美丽的.我希望完全理解 - 整个过程 - 一般,一步一步. 从沿着路线开始到最终使$x $x是从方法参数而来,并且是TestClass,它具有TestClass2的另一个依赖性,应通过:TestClass2 > 我认为这些都是美丽的机制和建筑,理解这是我非常想要的东西. 再次,我的问题是:Laravel中的反思如何实际工作? 这无关dd伙计们...没有dd.正如我之前说的那样 - 当我们从class method实例化时,就有这个对象.这不是要倾倒它,而是要从method injection refle
0 2023-05-26
编程技术问答社区
将回调转化为一个流
在perl中,一个人如何转换需要回调的函数,以返回结果流的新功能? 图像我有一个固定的功能,我无法更改: sub my_fixed_handler { my $callback = shift; my $count = 1; while(1) { $callback->($count++); } } 要打印所有数字计数,我可以轻松地编写此代码: my_fixed_handler( sub { my $num = shift; print "...$num\n"; }); ,但现在我需要基于my_fixed_handler的另一个功能,该功能仅返回一个计算步骤的结果: my $stream = my_wrapper( my_fixer_hander( ... ) ) ; $stream->next; # 1 $stream->next; # 2 这是可能的吗? 解决方案 使用以下
0 2023-05-24
编程技术问答社区
IoC容器涉及哪些性能开销?
松散的耦合当然很棒,但是我经常想知道使用IOC容器(例如Castle Windsor)在紧密耦合的系统上动态接线是什么? 我知道一个详细的答案将取决于IOC的使用方法,但我确实只是想了解IOC工作中涉及的努力. 有人有任何统计数据或其他资源吗? 谢谢 解决方案 有有关性能的链接 http://realfiction.net.net/?q=node/143 有一个结果 正常结构:0.0001/0.0002 激活剂结构:0.0069/0.0071 容器建设(城堡温莎):0.1014/0.1068 容器构造(Spring.net):0.069/0.0722 但是,如您所见/a>(autoFac更快) 正确的答案是,性能没关系:). 因为正确使用IOC时,当所有注册过程都处于初始化阶段时. 换句话说,IOC的使用必须实时减少您的" if"计数. 其他解决方案 您的初始化时间较慢,因为启动容器时,所有内容都已加载.如果启动时
2 2023-05-23
编程技术问答社区
Hiro与其他IoC容器的对比
在 "世界上最快的IOC容器...一个静态预编译的IOC容器,其执行速度与没有IOC容器的应用程序一样快" . 今天它仍然是最快的IOC容器吗?准备好生产了吗?是否还有其他容器可以在编译时进行IOC?与其他IOC容器相比,它的主要优势和缺点是什么? 谢谢 解决方案 hiro声称是最快的容器.该语句基于作者给出的基准(请参阅在这里进行许多容器之间的客观比较).该基准是否现实取决于您的应用程序的大小.基准似乎是巧妙的设置,具有一小件注册类型.在为基准添加更多注册时,性能开始下降(有关此的基准,请参见下文).仔细观察时,我们会看到Hiro具有 o(n),虽然普通的DI框架具有O(1)的特征,因此在其他框架中,性能与注册类型的数量保持恒定. HIRO的好处是,它可以生成一个新的组件,而解决新类型仅由一个接口调用组成.这很快.另一方面,最常见的DI框架将始终在呼叫getInstance期间进行词典查找. Hiro的GetInstance方法基本上是内部大型开关案例声明,以
0 2023-05-23
编程技术问答社区
Spring'的@Autowired是一个巨大的性能问题吗?
我有一个项目...我不知道... 200-300 daos/services/Controller,我使用@Autowired将所有内容连接在一起,而不是指定applicationContext.xml> 中的所有内容 我的问题是,这对我的创业时间产生了多少影响?删除所有@Autowired注释,并通过applicationContext.xml>? 手动连接此应用程序是值得的. 从建筑的角度来看,我喜欢@Autowired.我不想通过使用XML文件添加另一层复杂性 - 就我而言,它没有添加任何值.但是,如果这种事情在我的容器的负载时间中增加了10秒钟,我可能会考虑.如果费用为100毫秒,那么我将保持原样. 谢谢 解决方案 几乎相同.组件扫描要贵一些(当您扫描@Service,@Component时),但是,正如您所说,这是启动时间 - 仅发生一次.在适度的机器上,即使有注释,它也很快启动. 通常,我不会仅仅因为它增加了一些启动时间而放弃该方法.而且我可以向您
0 2023-05-23
编程技术问答社区
用Kotlin在Spring中注入组件的最佳方法
对于为Spring/Kotlin注入豆子,我知道两种方法: 将其传递到构造函数: @Service open class MyService @Autowired constructor( @Autowired val myRepository: MyRepository ) 使用" LateInit"关键字: @Service open class MyService { @Autowired lateinit var myRepository: MyRepository } 我知道这两个作品,但我想知道哪一个是最好的?我可以使用一种解决方案而不是另一种解决方案遇到一些问题? 谢谢! 解决方案 我更喜欢构造函数.如果只有一个构造函数,则弹簧不再需要@Autow的注释.这样,您就不必让课堂打开(您为某些春季的事情做,例如@scheduled,但这是另一个问题)或使用var.它也很容易阅读. 这
0 2023-05-23
编程技术问答社区
Spring Boot Autowired和Post Construct是如何工作的?
我有三个类,如下 - @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @Component public class Test { @Autowired Test2 test2; @PostConstruct public void sayHi(){ System.out.println("Hello World"); test2.SayHello(); } public void printMe(){ System.out.println("print me is called in Bean B"
2 2023-05-23
编程技术问答社区
两种类型使用一个子依赖关系--如何使用不同的实现方式
说我们注册了两种类型,RootA和RootB,每个类型都有对ISubdependency的依赖性. 共享相同的亚依赖关系实现很容易: services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); 现在的目标是使两种根类型使用不同的实现亚依赖性.呼叫者应能够注册实例,工厂或类型. // Instance services.AddRootA(options => options.UseSubDependency(new SubdependencyZ())); // Factory services.AddRootB(options => options.UseSubDependency
简单的注入器--"懒惰" 实例化一个第一次使用就有依赖性的单子
我们有一个执行许多不同事情的控制台应用程序.许多不同的事情及其所做的事情取决于我们作为命令行参数传递的内容.它最初是这种方式建造的,因此它仅在我们的构建服务器中占据了一个许可的位置,并且在建议将其拆分时,我遇到了一堆电阻. 此应用程序使用简单的注射器进行IOC ...问题是,我们有一堆不用于任何给定操作的单顿服务,并且它们加载了每种用途...这很烦人.我只想加载实际用于任何给定操作的依赖项. 看来Lazy周围有很多文档,但实际上这很令人沮丧.似乎懒惰的构造函数不知道其所使用的容器,因此必须使用无参数构造函数或一个值的工厂,该工厂似乎也不知道依赖项所在的容器. 我想用简单的喷油器做些什么?我一直在玩各种懒惰的通用版本,但我似乎无法得到我想要的. 解决方案 简单的喷油器允许您到// From the link above, chapter "Lazy" container.Register>( () => new
12 2023-05-23
编程技术问答社区
清除inversify-js容器并解析新的服务实例
我有一个我已经构建了一些服务类,可以使用 ioc 此类服务打算仅分享是一个单身实例,其中包括其他服务.他们有一种初始/破坏方法来帮助清除服务的内部状态. init/销毁机制效果很好,但最重要的是,有一种方法可以"清除"倒数容器单例,从scratch重建我的所有Singleton服务. 示例: src/services/a.ts @injectable() export class A extends Service { constructor() { super(); } init() { super.init(); // [...] Initialize A's state } destroy() { // [...] Destroy A's state super.destroy(); } method() { // [...] Provide functionality t
2 2023-05-23
编程技术问答社区
ViewModel到ViewModel的通信
给定以下方案: ViewModela启动ViewModelB(当然,通过使用IOC和DI来解决所需类型的通用控制器). ViewModelb需要在ViewModela中设置属性值. 简单地通过构造器注入将ViewModela注入ViewModelB并直接设置属性? 或… 是否应该使用Prism的EventAggregator之类的消息系统来处理ViewModels之间的所有通信? 我喜欢注射方法,因为它很容易,但是我的直觉告诉我我缺少一些东西.我呼吁您的集体智慧来帮助填补我的盲点. 解决方案 我建议您阅读 )因为它是相似的,但不完全是您的问题.它确实涉及父/子查看模型对象之间的属性的通信. 让我们看一个基本示例: ViewModelA是父母,必须在b 上介绍某些属性的总和 ViewModelB是孩子,有一个需要求和的财产 因此,用户提出了在B上编辑该属性的请求,并且请求成功,因此B大概更改其属性的价值并启动A PropertyC
在Autofac中,是否有可能解决一个类型的所有服务,即使它们是用一个名称或密钥注册的?
在AutoFac中,可以做以下所有注册服务: IEnumerable all = Context.Resolve>() 但是,这不包括被注册为命名服务的. 查看AutoFac源,这似乎是因为该服务是根据键入服务或键控服务来查询的. . 有没有办法将所有服务解析为可感染的,无论是否注册了名称? 解决方案 这里最好的选择是使用键和常规"键入"服务注册项目: builder.Register() .As() .Keyed("someKey"); 然后,您只需分辨IEnumerable即可获得您追求的结果,同时也支持通过键(或名称)解决这些结果. 如果您担心要维护IBeverage的特定默认注册,则仅在其他上使用PreseveExistingDefaults()(或确保您的预期默认值最后一次注
44 2023-05-23
编程技术问答社区
如何使用Simple Injector向构造函数传递一个参数?
简单的喷油器可以在解决时将参数传递到构造函数?我想知道这两个框架是否都可以完成Unity的Resolververoverride或dependencyOverride的工作. 解决方案 我怀疑这个问题是关于在服务实际解决时将原始值传递给构造函数. 让我们设置一个简单的测试类: public interface IFoo { } public class Foo : IFoo { public Foo(string value) { } } foo类采用一个字符串参数,我们在解决IFOO服务时要提供的字符串参数. var container = new ServiceContainer(); container.Register((factory, value) => new Foo(value)); var firstFoo = container.GetInstance(
4 2023-05-23
编程技术问答社区
如何使用Laravel IoC将数据库注入构造函数
我想使用DB类与IOC容器进行交易. use Illuminate\Database\Connection as DB; public function __construct(DB $db) { $this->db = $db; } 但是当使用DB类时,我会出现错误. Unresolvable dependency resolving [Parameter #0 [ $dsn ]] in class PDO 我知道,必须绑定一些东西,但我不知道什么? 解决方案 您需要更改 use Illuminate\Database\Connection as DB; 进入 use Illuminate\Database\DatabaseManager as DB; 我认为您可以在这里使用DB外观,但实际上您不能.您需要明确通过此处的班级,该课程在 .
0 2023-05-22
编程技术问答社区
在asp.net core razor页面中使用带有部分视图的DI
部分视图(否则工作完全很好;当不使用DI时)正在使用以下行消费: 位置清单的ctor录制LocationDbContext类的对象,基本上是DbContext的孩子. 但是,事实证明,我无法在对部分的呼叫中实例化LocationDbContext. 我该如何纠正? 解决方案 我认为您应该使用public class YourViewComponent : ViewComponent { private readonly LocationDbContext dbContext; public YourViewComponent (LocationDbContext dbContext) { this.dbCo
SFig语言的语法是否高效、清晰(比Spring-Framework'的XML DSL更好)?
附录编辑: 尚未接受答案 没有任何反馈 经验丰富的春季框架 开发人员. 我一直在研究用于Spring-Framework ApplicationContext.xml文件的替换DSL(其中描述了用于加载到Spring Bean Factory中的bean初始化和依赖关系的关系). 我的动机是,我只是不喜欢Spring XML用于此目的的使用,也不喜欢到目前为止设计的任何替代方案.由于我不会涉足的各种原因,我想使用一种声明性的语言而不是诸如Groovy之类的命令性脚本语言. 所以我抓住了Antlr解析器工具,并一直在设计我称为Sfig的新豆厂DSL.这是一个对此进行更多讨论的链接: 一个> 这是源代码存储库网站: 我很想知道到目前为止我对语言语法的情况.您认为SFIG既高效又清晰地理解? (我现在特别关注Mulit-Line文本字符串): properties_include "classpath:application.properties
0 2023-05-20
编程技术问答社区
无法获得Ninject ConstructorArgument的值(作为参数传递给kernel.Get)。
难以获得将构造方法参数的值传递给kernel.get().我想使用参数的值来确定两个字符串值中的哪个将传递到构造函数中.该参数实际上是在预期的情况下,我只是无法达到其价值.调用参数的getValue方法后,我最终得到了无效的例外: namespace MyNS.DBProviders { public abstract class DBProviderBase { private ObjectContext _db; public DBProviderBase(ObjectContext db) { _db = db; } ... //abstract methods here ... } public class DBProviderB : DBProviderBase { public DBProviderB(Ob