具体的な型を登録するために AnyConcreteTypeNotAlreadyRegisteredSource を使用しています。これらの型のプロパティも注入できる方法はありますか?
ありがとう。
具体的な型を登録するために 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());