属性 基础注入 class
Property injection in base class
在 ASP.NET 样板模板中,有一个 AppServiceBase
具有两个属性:TenantManager
和 UserManager
。
如果我需要使用这些属性,我应该这样做:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor(TenantManager service1, UserManager service2)
{
TenantManager = service1;
UserManager = service2;
}
}
所以我在派生的 class ctor
中请求这两个并将它们传递给基础 class:
public class DerivedClass : BaseClass
{
ctor(TenantManager service1, UserManager service2)
: base(service1, service2)
{
}
public void SomeMethod()
{
// Use base class properties
TenantManager.Something();
UserManager.Something();
}
}
在 ASP.NET Core DI 中,我可以做类似的事情:
public abstract class BaseClass
{
public TenantManager Service1 => HttpContext.RequestServices.GetService<TenantManager>();
public UserManager Service2 => HttpContext.RequestServices.GetService<UserManager>();
ctor()
{
}
}
并且派生的 classes 不必在 ctor
中请求它们并将它们传递给基础 class:
public class DerivedClass : BaseClass
{
ctor(ISpecificService service)
{
// I can have other types injected,
// but TenantManager and UserManager will still be available to use
}
public SomeMethod()
{
// Use base class properties
Service1.Something();
Service2.Something();
}
}
那么,我怎样才能在ABP中实现上面那样的东西呢?
我试过了:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
var t = IocManager.Instance.CreateScope();
TenantManager = t.Resolve<TenantManager>();
UserManager = t.Resolve<UserManager>();
}
}
但是,如果我在派生 class 中访问这些属性,它们已经被处理掉了。但是根据文档,它应该一直存在到我的 class 被释放。
如果您没有在构造函数中使用范围,请不要创建范围。
Property injection pattern 无需在构造函数中解析即可工作。
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
}
}
在 ASP.NET 样板模板中,有一个 AppServiceBase
具有两个属性:TenantManager
和 UserManager
。
如果我需要使用这些属性,我应该这样做:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor(TenantManager service1, UserManager service2)
{
TenantManager = service1;
UserManager = service2;
}
}
所以我在派生的 class ctor
中请求这两个并将它们传递给基础 class:
public class DerivedClass : BaseClass
{
ctor(TenantManager service1, UserManager service2)
: base(service1, service2)
{
}
public void SomeMethod()
{
// Use base class properties
TenantManager.Something();
UserManager.Something();
}
}
在 ASP.NET Core DI 中,我可以做类似的事情:
public abstract class BaseClass
{
public TenantManager Service1 => HttpContext.RequestServices.GetService<TenantManager>();
public UserManager Service2 => HttpContext.RequestServices.GetService<UserManager>();
ctor()
{
}
}
并且派生的 classes 不必在 ctor
中请求它们并将它们传递给基础 class:
public class DerivedClass : BaseClass
{
ctor(ISpecificService service)
{
// I can have other types injected,
// but TenantManager and UserManager will still be available to use
}
public SomeMethod()
{
// Use base class properties
Service1.Something();
Service2.Something();
}
}
那么,我怎样才能在ABP中实现上面那样的东西呢?
我试过了:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
var t = IocManager.Instance.CreateScope();
TenantManager = t.Resolve<TenantManager>();
UserManager = t.Resolve<UserManager>();
}
}
但是,如果我在派生 class 中访问这些属性,它们已经被处理掉了。但是根据文档,它应该一直存在到我的 class 被释放。
如果您没有在构造函数中使用范围,请不要创建范围。
Property injection pattern 无需在构造函数中解析即可工作。
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
}
}