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

标签 c# dependency-injection autofac

我有以下类(class):

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);
}

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

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

最佳答案

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

就您的情况而言,您的类(class)似乎有两项职责。解决方案是将其分成两个单独的类。

关于c# - Autofac 通过指定的构造函数解析类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343353/

相关文章:

c# - 使用子类对象列表分配父类引用列表不起作用

c# - 依赖注入(inject) - 处理多次注入(inject)的简洁方法

java - 如何将依赖项注入(inject) JerseyTest?

c# - 使用哪种模式进行日志记录?依赖注入(inject)还是服务定位器?

autofac - 创建将随时间过期的 Autofac Lifetimescope

c# - DependencyResolver.SetResolver 不工作

c# - 如何清除 c# 中 System.Azure.EventHubs.EventDataBatch 中的值?

c# - 为什么 VS 一直坚持要求另一个正确的 parent ?

c# - 多接口(interface)装饰器——Autofac 中的循环依赖之谜

c# - 如何使用 Entity Framework Code First V6.1.2 进行集成测试