1

我正在使用 AnyConcreteTypeNotAlreadyRegisteredSource 来注册具体类型。有什么方法可以注入这些类型的属性吗?

谢谢。

4

1 回答 1

1

简短的回答是

因为 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());
于 2013-01-13T08:24:43.227 回答