Closed jrt324 closed 4 years ago
抽象类是无法被实例化的,因此注入抽象类到容器是无法支持的(即使用ASP.NET Core的原生的注入方式也是无法注入的),只能使用子类继承此抽象类进行实例化。
我是使用子类继承此抽象类进行实例化。 你看我给出的RoleRepository是继承至Repository
根据你的描述:
FooService
[Service]
public class FooService
{
}
AbstractService
public abstract class AbstractService
{
[Autowired]
protected readonly FooService fooService;
}
BasedAbstractService
[Service]
public class BasedAbstractService : AbstractService
{
public FooService GetFooService() { return fooService; }
}
UnitTest
[Fact]
public void TestBasedAbstractService()
{
var service = consoleHost.GetService<BasedAbstractService>();
Assert.NotNull(service.GetFooService());
Assert.IsType<FooService>(service.GetFooService());
}
输出:
正在执行测试方法“NAutowired.Console.Test.UnitTest.TestBasedAbstractService” ----------正在启动测试运行---------- [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.1 (32-bit .NET Core 3.1.5) [xUnit.net 00:00:00.38] Starting: NAutowired.Console.Test [xUnit.net 00:00:00.49] Finished: NAutowired.Console.Test ========== 测试运行已完成: 1.1 秒 中运行 1 个测试(1 个已通过,0 个失败,0 个已跳过) ==========
根据你的描述,建议查看IRBACService
类是否增加了[Service]
特性(也可手动通过service.AddScoped
[Autowired]在抽象类内部适用,注入不了值