我正在尝试将ASP.NET应用程序移植到ASP.NET Core。我在UnitOfWork实现上进行了属性注入(使用Ninject),如下所示:
[Inject]
public IOrderRepository OrderRepository { get; set; }
[Inject]
public ICustomerRepository CustomerRepository { get; set; }
是否可以使用.NET Core上的内置DI实现相同的功能?另外,是否可以使用基于约定的绑定?
不,有意使内置的DI / IoC容器在使用和功能上都保持简单,从而为其他DI容器的插入提供了基础。
因此,没有内置支持:自动发现,自动注册,装饰器或注入器或基于约定的注册。据我所知,还没有计划将其添加到内置容器中。
您必须使用带有属性注入支持的第三方容器。
请注意,在所有情况下,属性注入在98%的情况下都被认为是不好的,因为它隐藏了依赖关系,并且不能保证在创建类时将注入对象。
使用构造函数注入,您可以通过构造函数强制执行此操作,并检查null和not创建类的实例。通过属性注入,这是不可能的,并且在单元测试期间,当在构造函数中未定义类时,类所需的服务/依赖项也不明显,因此很容易错过和获取NullReferenceExceptions
。
我发现属性注入的唯一有效理由是将服务注入到第三方库生成的代理类中,即从您无法控制对象创建的接口创建的WCF代理。甚至在那里,它仅适用于第三方库。如果您自己生成WCF代理,则可以轻松地通过扩展代理类,partial class
并添加新的DI友好构造函数,方法或属性。
避免在其他任何地方使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句