我正在尝试做这样的事情。但是WithMetadata方法不会让我。
这是Autofac中的一个问题,并且WithMetadata重载中的TScanningActivatorData是否应该更改为TActivatorData,或者我是以错误的方式接近这个?
builder.RegisterType(myType).As<IMyType().AsSelf().WithMetadata("somekey", delegate(Type t)
{
//dosomething
return t;
});
这给我带来了WithMetadata方法的错误:The type 'Autofac.Builder.ConcreteReflectionActivatorData' cannot be used as type parameter 'TScanningActivatorData' in the generic type or method 'Autofac.RegistrationExtensions.WithMetadata<TLimit,TScanningActivatorData,TRegistrationStyle>(Autofac.Builder.IRegistrationBuilder<TLimit,TScanningActivatorData,TRegistrationStyle>, string, System.Func<System.Type,object>)'. There is no implicit reference conversion from 'Autofac.Builder.ConcreteReflectionActivatorData' to 'Autofac.Features.Scanning.ScanningActivatorData'.
答案 0 :(得分:1)
对于您想要实现的目标,有一个更合适的重载。传递给委托的t
参数与myType
相同 - 因此等效代码为:
var someValue = DoSomething(myType);
builder.RegisterType(myType)
.As<IMyType>()
.AsSelf()
.WithMetadata("somekey", someValue);
您一直在寻找的超载用于扫描注册,例如:使用RegisterAssemblyTypes()
而不是RegisterType()
时。
希望这会有所帮助。 尼克