【发布时间】:2017-05-11 15:11:48
【问题描述】:
我有以下课程:
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();
【问题讨论】:
-
为什么你会有不同的构造函数,在我看来就像设计的味道。
-
你觉得如果我再创建一个抽象的观察者会更好吗?
-
两个不同的构造函数清楚地表明类做的比它应该做的更多,处理
UserTask和处理UserAccount。我认为将这些分开会更好。这也将解决您的Autofac问题。 -
我之所以选择这样的设计,是因为
UserAccount的一些修改需要UserTask更改。指定,如果UserAccount属性已更改,我需要重新计算一些UserTask字段。 -
有多个构造函数是an anti-pattern。
标签: c# dependency-injection autofac