我一直在思考如何将依赖项注入更好地直接集成到类似C#的语言中。我想出一个潜在的解决方案,希望听听您的意见。我没有使用很多依赖注入框架,所以可能有些东西我忽略了
无论如何,该想法是能够使用关键字将属性声明为“可注入”。当实例化一个对象,并且未通过构造函数或对象初始化程序初始化该属性时,它将从某些全局服务中请求该属性类型的实例。
同样,您可以为该服务注册不同类型的处理程序,以便可以实例化注入的属性类型。
使用这种IMO架构的好处是它相当灵活且易于使用。不利之处在于,每次您启动带有注入的类时,对单身人士进行标注都可能会有一些开销。
再说一次,对于在高性能解决方案中经常实例化的类来说,这只是一个问题,所以这不是什么大问题。在这些情况下,也许您可以使用某种工厂。
思想,问题,问题,更好的主意?
码
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));