我目前使用NInject将接口绑定到具体类型并将它们注入到我的类中。但是,据我了解,这是一个运行时事务。对我来说,如果有人想改变我的应用程序的行为,这似乎是一个攻击点。
有什么可以让我将我的依赖注入 IoC 迁移到编译时(阅读:构建后 IL 编织/替换)?
详细说明
在我的代码中,我设置了一个绑定
Bind<IFoo>().To<Foo>()
Bind<Bar>().ToSelf().InSingletonScope();
与 ctorFoo(Bar dependency)
在我的应用程序的根目录(在启动时)我解析了图表
var foo = kernel.Get<IFoo>();
假设我没有服务定位器(反模式对吗?)。所以我已经没有用kernel
了。
现在我想要一个“post-build release-compile”,用实例替换内核的解析引擎,或者引用常量/单例等。这样虽然我的代码看起来像这样;
var foo = kernel.Get<IFoo>();
实际上,在我的最终构建阶段更换 IL 后,它看起来像这样:
var bar = new Bar();
var foo = new Foo(bar);
并且不再引用 NInject 了。
我对这个问题的理由是我正在使用Fody来 IL Weave 我所有的 PropertyChanged raisers,我想知道是否可以为依赖注入做类似的事情。