ninject如何在高级别工作,它如何拦截对象实例化?

Bla*_*man 5 structuremap asp.net dependency-injection ninject

在高层次上,这些如何解决.注射框架有效吗?

我能理解你是否总是通过自定义工厂实例化对象,如:

IUser user = DepInjector.Get<User>();
Run Code Online (Sandbox Code Playgroud)

我猜测发生了什么,无论你在哪里定义映射,它都会查看你想要的类型并尝试找到匹配项,如果找到,它将通过反射实例化类型.

是否有dep.注射.框架可以像:

IUser user = new User();
Run Code Online (Sandbox Code Playgroud)

如果是这样,它将如何获得正确的用户,它在哪里挂钩到CLR来执行此操作?如果是asp.net网站,它有什么不同吗?

Dan*_*plo 8

如果你想知道Ninject是如何工作的,那么明显的起点就是阅读他们的官方wiki上的How Injection如何工作.它确实使用反射,但它现在也使用动态方法:

"默认情况下,StandardKernel将创建动态方法(通过 System.Reflection.Emit.DynamicMethod),可用于将值注入不同的注入目标.然后通过委托调用触发这些动态方法."

至于你的第二个例子,我不相信有任何DI框架可以做你所要求的.但是,构造函数注入往往是实现IoC的最常用方法,因此在构造类时,它通过某些配置绑定知道要绑定到哪种类型.因此,在您的示例中,IUser将映射到User配置绑定中的具体,以便任何具有IUser参数作为其构造函数的一部分的消费类将获得User传入的正确类型.