2016-07-19 57 views
9

我想将一个asp.net应用程序移植到asp.net核心。我的属性注入(使用ninject)在我这样的UnitOfWork实现上。在Asp.Net核心中的属性注入

[Inject] 
public IOrderRepository OrderRepository { get; set; } 
[Inject] 
public ICustomerRepository CustomerRepository { get; set; } 

有没有一种方法可以实现相同的功能,使用建立在.net核心的DI?也有可能使用基于约定的绑定?

+0

相关:https://stackoverflow.com/questions/39849142/when-to-use-property-injection – Steven

回答

10

不,内置的DI/IoC容器在使用和功能上都有意保持简单,为其他DI容器提供插件基础。

因此,没有内置的支持:自动发现,自动注册,修饰器或注入器或基于约定的注册。据我所知,目前还没有计划将其添加到内置容器中。

您将不得不使用具有属性注入支持的第三方容器。

请注意,属性注入在98%的情况下被认为是不好的,因为它隐藏了依赖关系,并且不能保证在创建类时注入对象。

使用构造函数注入,您可以通过构造函数强制执行此操作,并检查null并且不创建该类的实例。有了属性注入,这是不可能的,在单元测试期间,当它们没有在构造函数中定义时,它不明确哪个类需要哪些服务/依赖项,因此很容易错过并得到NullReferenceExceptions

我发现的物理注入的唯一有效原因是将服务注入由第三方库生成的代理类中,即从无法控制对象创建的接口创建的WCF代理。

避免它无处不在其他。