以下内容:
public class AClass
{
public ADependent Dependent { get; set; }
}
public class ADependent
{
public ADependent(AClass ownerValue) {}
}
以下注册......
builder.RegisterType<AClass>().PropertiesAutowired().InstancePerDependency();
builder.RegisterType<ADependent>().PropertiesAutowired().InstancePerDependency();
当我解析一个AClass时,如何确保'ownerValue'是要解析的AClass的实例,而不是另一个实例? THX
关注
上面的示例并没有真正正确地解决问题,这是在扫描时注册时如何连接ADependent ...例如
public class AClass : IAClass
{
public IADependent Dependent { get; set; }
}
public class ADependent : IADependent
{
public ADependent(IAClass ownerValue) {}
}
// registrations...
builder.RegisterAssemblyTypes(assemblies)
.AssignableTo<IAClass>()
.As<IAClass>()
.InstancePerDependency()
.PropertiesAutowired();
builder.RegisterAssemblyTypes(assemblies)
.AssignableTo<IADependent>()
.As<IADependent>()
.InstancePerDependency()
.PropertiesAutowired();
我正在寻找的功能实际上是另一种关系类型,如
public class ADependent : IADependent
{
public ADependent(OwnedBy<IAClass> ownerValue) {}
}
OwnedBy表示ownerValue是导致创建ADependent的实例。这样的事情有意义吗?它肯定会使UI组件的连接变得轻而易举。
答案 0 :(得分:1)
为了扩展Steven的方法,您甚至可以Resolve()
第二个类,将第一个实例作为参数传递:
builder.RegisterType<ADependent>();
builder.Register<AClass>(c =>
{
var a = new AClass();
a.Dependent = c.Resolve<ADependent>(TypedParameter.From(a));
return a;
});
答案 1 :(得分:0)
你可以注册一个lambda来做这个伎俩:
builder.Register<AClass>(_ =>
{
var a = new AClass();
a.Dependent = new ADependent(a);
return a;
});