Autofac通过指定的构造函数解析类

时间:2016-12-27 10:26:32

标签: c# dependency-injection autofac

我有以下课程:

public abstract class UserTaskChangesObserver : IObserver
{
    protected readonly IUserTaskChangesObservable UserTaskChangesObservable;
    protected readonly IUserAccountChangesObservable UserAccountChangesObservable;

    protected UserTaskChangesObserver(IUserTaskChangesObservable userTaskChangesObservable)
    {
        if (userTaskChangesObservable == null)
        {
            throw new ArgumentNullException(nameof(userTaskChangesObservable));
        }
        UserTaskChangesObservable = userTaskChangesObservable;
    }

    protected UserTaskChangesObserver(IUserAccountChangesObservable userAccountChangesObservable)
    {
        if (userAccountChangesObservable == null)
        {
            throw new ArgumentNullException(nameof(userAccountChangesObservable));
        }
        UserAccountChangesObservable = userAccountChangesObservable;
    }

    protected abstract void OnUserTaskChange(object sender, UserTaskEventArgs userTaskEventArgs);
    protected abstract void OnUserAccountChange(object sender, UserAccountEventArgs userTaskEventArgs);
}

是否可以说autofac我想在从上下文中解析RealClass时使用哪个构造函数? 例如,对于当前服务,我想调用第一个构造函数:

builder.RegisterType<UserTaskService>().AsSelf().As<IUserTaskChangesObservable>()
     .OnActivated(args =>args.Context.Resolve<UserTaskChangesObserver>().Subscribe()).InstancePerLifetimeScope();

1 个答案:

答案 0 :(得分:3)

有两个构造函数甚至不是设计气味,因为@Lepijohnny指出它是反模式This article详细解释了为什么这是一种反模式以及如何防止这种情况。

在你的情况下,你的班级似乎有两个责任。解决方案是将其拆分为两个单独的类。