我使用AnyConcreteTypeNotAlreadyRegisteredSource来注册具体类型。有什么方法可以注入这些类型的属性吗?
感谢。
答案 0 :(得分:1)
简短回答是否
因为默认情况下Autofac不会注入属性,AnyConcreteTypeNotAlreadyRegisteredSource
无法配置此属性。
但是,基于original implementation,您可以创建自己的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());