Dependency injection Ninject依赖项注入作用域
我正试图用Ninject将依赖项注入到继承权中,我对延迟注入的作用域有一个疑问。我有一个基本的层次结构,包含一个家长和一个孩子。孩子被注射到父母体内,他们都被注射了“盾形纹章”属性:Dependency injection Ninject依赖项注入作用域,dependency-injection,ninject,Dependency Injection,Ninject,我正试图用Ninject将依赖项注入到继承权中,我对延迟注入的作用域有一个疑问。我有一个基本的层次结构,包含一个家长和一个孩子。孩子被注射到父母体内,他们都被注射了“盾形纹章”属性: public class Parent { [Inject] public Child Child { get; set; } [Inject] public CoatOfArms CoatOfArms { get; set; } } public class Child {
public class Parent
{
[Inject]
public Child Child { get; set; }
[Inject]
public CoatOfArms CoatOfArms { get; set; }
}
public class Child
{
[Inject]
public CoatOfArms CoatOfArms { get; set; }
}
public class CoatOfArms
{
}
由于它们属于同一个家族,它们都应该获得相同的盾形纹章,因此我设置了绑定,将它们的范围限定到父请求中的CoastOfArms:
public class FamilyModule : NinjectModule
{
public override void Load()
{
Bind<Parent>().ToSelf();
Bind<Child>().ToSelf();
Bind<CoatOfArms>().ToSelf().InScope(ctx =>
{
var request = ctx.Request;
if (typeof(Parent).IsAssignableFrom(request.Service))
return request;
while ((request = request.ParentRequest) != null)
if (typeof(Parent).IsAssignableFrom(request.Service))
return request;
return new object();
});
}
}
这会中断,因为这是一个全新的请求,请求树上的漫游会随着该请求而停止。我可以手动将CoatFarms作为属性传递,但是我必须记住在试图创建子对象的代码中的其他地方都要这样做。此外,子类可能有自己的子类和子类等,因此我将不得不再次手动传递层次结构链中的所有参数,从而失去依赖项注入作用域的所有好处
有没有一种方法可以创建我的子对象,并以某种方式将请求链接到父请求,这样作用域就好像子对象与父对象同时被注入一样工作?使用ninject.extensions.contextpreservation(,作为nuget package提供),然后进行更改
public void InjectChild()
{
this.Child = this.Kernel.Get<Child>();
}
}
这需要:(也可以作为nuget软件包提供)
编辑:您可能还需要将IKernel
更改为IResolutionRoot
以进行解析
public void InjectChild()
{
this.Child = this.Kernel.Get<Child>();
}
public void InjectChild()
{
this.Child = this.Kernel.ContextPreservingGet<Child>();
}
public override void Load()
{
Bind<Parent>().ToSelf().DefinesNamedScope(FamilyScopeName);
Bind<Child>().ToSelf();
Bind<CoatOfArms>().ToSelf().InNamedScope(FamilyScopeName);
}