【发布时间】:2014-11-07 18:50:54
【问题描述】:
我正在开发一个 Windows Phone 8.1 应用程序,并且我有一个具有公共属性的基类。
public class ViewModelBase
{
public ISomeClass MyProp {get;set;}
}
我的派生类是这样的
public class MainViewModel : ViewModelBase
{
private readonly INavigation _navigation;
public MainViewModel(INavigation navigation)
{
_navigation = navigation;
}
}
在我的 App.cs 我有
var builder = new ContainerBuilder();
builder.RegisterType<Navigation>().As<INavigation>();
builder.RegisterType<SomeClass>().As<ISomeClass>();
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
创建 MainViewModel 时,我的 INavigation 已解析,但 MyProp 为空。 我试过了
builder.Register(c => new ViewModelBase { MyProp = c.Resolve<ISomeClass>() });
builder.Register(c => new ViewModelBase()).OnActivated(e => e.Instance.MyProp = e.Context.Resolve<ISomeClass>());
builder.RegisterType<ViewModelBase>().PropertiesAutowired();
但这些都不起作用!
此处发布的解决方案 http://bling.github.io/blog/2009/09/07/member-injection-module-for-autofac/
有效,但我不喜欢它:)
在这种情况下我不想使用构造函数注入。
谢谢。
【问题讨论】:
-
您能解释一下为什么您“不想使用构造函数注入”,因为它几乎可以轻松解决问题。
-
因为我必须在派生类构造函数中添加依赖项并将其传递给基构造函数。
-
你不喜欢这样是因为?
public MainViewModel(INavigation navigation, ISomeClass someClass) : base (someClass)这对于追随你的人来说更容易理解,他们可以看到你的班级所依赖的一切。 -
我理解你的意思并同意你的看法。我想尽量减少打字量。也许看我的课依赖什么并不容易,但现在我可以忍受。真正的问题是为什么 autofac 属性注入不起作用?
标签: c# dependency-injection autofac