ASP.NET Core中注入方式默认为构造器注入,不支持属性注入以及其他更高级的注入.参考下面的说明:
但是对于习惯了属性注入的开发人员来说比较头疼,为了实现自动注入,需要额外加一个构造函数,还需要把需要提供的服务一一对应,这种操作兼职逼死强迫症.当然官方也给出解决方案,就是使用第三方的容器,比如Autofac,Unity.但是为了一个属性注入而抛弃内置的容器引入第三方容器,感觉也得不偿失.所以如果能在内置容器的基础上突破构造器的限制,则是两全其美.
属性注入就细节也有两种方式:1. 通过名称,2. 通过特性. 为了可以控制哪些属性需要注入,哪些属性不需要注入,同时在不能提供服务时给出异常提醒,我们选择第二种方式.
1. 新建特性RequiredServiceAttribute
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace OneSmart.Store.Admin.Web.Extensions
{
[AttributeUsage(AttributeTargets.Property)]
public class RequiredServiceAttribute : Attribute
{
}