我正在使用 AnyConcreteTypeNotAlreadyRegisteredSource 来注册具体类型。有什么方法可以注入这些类型的属性吗?
谢谢。
简短的回答是不
因为 Autofac 默认情况下不会注入属性,并且 AnyConcreteTypeNotAlreadyRegisteredSource
没有提供配置它的方法。
但是,基于原始实现,您可以创建自己的,使用以下选项AnyConcreteTypeNotAlreadyRegisteredSourceWithProperties
注册组件:PropertiesAutowired()
public class AnyConcreteTypeNotAlreadyRegisteredSourceWithProperties
: IRegistrationSource
{
public IEnumerable<IComponentRegistration> RegistrationsFor(
Service service,
Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
{
if (registrationAccessor == null)
{
throw new ArgumentNullException("registrationAccessor");
}
var ts = service as TypedService;
if (ts == null ||
!ts.ServiceType.IsClass ||
ts.ServiceType.IsSubclassOf(typeof(Delegate)) ||
ts.ServiceType.IsAbstract ||
registrationAccessor(service).Any())
return Enumerable.Empty<IComponentRegistration>();
return new[] { RegistrationBuilder.ForType(ts.ServiceType)
.PropertiesAutowired().CreateRegistration() };
}
public bool IsAdapterForIndividualComponents
{
get { return false; }
}
}
然后你注册你的实现:
var builder = new ContainerBuilder();
builder
.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSourceWithProperties());