Autofac。无需特定注入即可解析基类属性

问题描述 投票:0回答:2

我正在寻找以下问题的可能解决方案。

我有一个基类,它具有一个依赖项,我目前使用属性注入来满足该依赖项。

public class BaseClass {
    IService SomeService { get; set; }
}

我有多个继承自该基类的类。

public class DerivedClass : BaseClass, IDerivedClass {

}

我使用以下内容进行注入。

builder.RegisterType<DerivedClass>().As<IDerivedClass>().OnActivated(e => e.Instance.SomeService = e.Context.Resolve<IService>());

我对扩展基类的大约 12 个其他类执行此操作。有没有办法让任何扩展 BaseClass 的类都能获得我的 IService 注册,而无需为每个注册设置激活事件?像这样工作正常,但只是想清理注册。

c# dependencies inversion-of-control autofac code-injection
2个回答
1
投票

只需使用构造函数注入即可。为您的类创建带有参数的构造函数,例如

public DerivedClass(IServiceOne service1, IService2 service2)
{
this._service1 = service1;
this._service2 = service2;

}

并让autofac自动完成他的工作,就像

builder.RegisterType<T>();

0
投票

十年后,现在您可以使用

required
属性来启用自动注入,而无需在构造函数中添加参数:https://autofac.readthedocs.io/en/latest/register/prop-method-injection.html#required-properties

© www.soinside.com 2019 - 2024. All rights reserved.