我正在试着做这样的事情。但是,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'.
发布于 2010-11-10 07:35:14
对于您试图实现的目标,有一个更合适的重载。传递给委托的t参数与myType相同,因此等效代码为:
var someValue = DoSomething(myType);
builder.RegisterType(myType)
.As<IMyType>()
.AsSelf()
.WithMetadata("somekey", someValue);您一直在查看的重载是用于扫描注册,例如,使用RegisterAssemblyTypes()而不是RegisterType()时。
希望这能有所帮助。尼克
https://stackoverflow.com/questions/4131921
复制相似问题