1

具体的な型を登録するために AnyConcreteTypeNotAlreadyRegisteredSource を使用しています。これらの型のプロパティも注入できる方法はありますか?

ありがとう。

4

1 に答える 1

1

短い答えはノーです

Autofac はデフォルトでプロパティを挿入せず、 AnyConcreteTypeNotAlreadyRegisteredSourceこれを構成する方法を提供しないためです。

ただし、元の実装に基づいて、コンポーネントをオプションで登録する独自の実装を作成できます。AnyConcreteTypeNotAlreadyRegisteredSourceWithPropertiesPropertiesAutowired()

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 に答える