我如何映射Unity以注入容器实例,我使用DependencyAttribute类但我总是得到一个实例null。
我可以尝试:
static void Main()
{
using (var container = new UnityContainer())
{
container.RegisterType<Invoice, Invoice>(new HierarchicalLifetimeManager());
container.RegisterType<Form1>().RegisterInstance<IUnityContainer>(container);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(container.Resolve<Form1>());
}
}
public partial class Form1 : Form
{
[Dependency]
public IUnityContainer Container { get; set; }
public Form1()
{
InitializeComponent();
var invoice = Container.Resolve<Invoice>();
}
}
答案 0 :(得分:1)
好的,所以你无法从构造函数中访问Container
属性,因为它尚未设置。
如果您考虑如何手动创建对象,那么为什么不应该这样做:
Form1 myForm = new Form1();
myForm.Container = new UnityContainer();
显然,鉴于上面的代码,在设置之前就无法访问容器 - Unity正在做同样的事情。
修复方法是将其作为构造函数参数注入:
public partial class Form1 : Form
{
public Container { get; set; }
public Form1(IUnityContainer container)
{
InitializeComponent();
this.Container = container;
var invoice = Container.Resolve<Invoice>();
}
}
鉴于您的澄清,我认为您实际应该做的是让您的财产成为Invoice
:
public partial class Form1 : Form
{
[Dependency]
public Invoice { get; set; }
public Form1()
{
InitializeComponent();
}
}
请注意,由于前面概述的相同原因,您仍然无法从构造函数中访问Invoice
。