好吧,我有一个在基类中定义的依赖属性,我试图在派生类的构造函数中使用它,但这不起作用,属性显示为空。 Unity在使用container.Resolve()解析实例之后解析依赖属性。使用Unity的构造函数中使用的属性依赖注入
一种选择我是一个IUnityContainer参数添加到我的MyViewModel类的构造函数,并设置ILogger属性我自己喜欢的东西:
public MyViewModel(IUnityContainer container)
{
Logger = container.Resolve<ILogger>();
}
编辑:通过@Wiktor_Zychla另一个建议是通过一项构造函数注入参数为:
public MyViewModel(ILogger _logger)
{
Logger = _logger;
}
这似乎很好地工作,但我会做到这一点对我的所有派生的ViewModels ..
但是,我没有在我的基类中使用注释的ILogger依赖项。 请参阅下面的我的课堂样本。问题是:我有哪些选择,或者我做错了什么?
谢谢!
我有一个ViewModel基类是这样的:
public abstract class ViewModelBase
{
[Dependency]
public ILogger Logger { get; set; }
....
}
然后我有一个类继承的是:
public class MyViewModel : ViewModelBase
{
public MyViewModel()
{
//I want to use my dependent property in constructor, but doesn't
Logger.Error("PRINT AN ERROR");
}
}
在我的应用程序入口点我登记我的ILogger作为一个独立的,并我的MyViewModel类:
container.RegisterType<ILogger, MyAppLogger>(new ContainerControlledLifetimeManager());
container.RegisterType<MyViewModel>();
再次,“公共MyViewModel(ILogger记录器)”有什么问题? –
我绝对可以这样做,我只是想避免必须将我的本地ILogger属性设置为所有派生的ViewModel的构造函数注入参数,但似乎没有办法解决它。 –
我认为这是一个优势,因为依赖关系的意图是明确的。另一方面,在建设者通过容器闻起来很糟糕;) –