1、不使用BuildUp方法
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
Fighter you = new Fighter();
you.AK47.Fire(); //抛出异常,AK47属性为null
Console.Read();
}
}
public class Gun
{
public void Fire()
{
Console.WriteLine("砰砰砰");
}
}
public class Fighter
{
public Gun AK47 { get; set; }
}
2、使用Dependency+BuildUp
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<Fighter>();
Fighter you = new Fighter();
container.BuildUp(you);
you.AK47.Fire(); //"砰砰砰
Console.Read();
}
}
public class Gun
{
public void Fire()
{
Console.WriteLine("砰砰砰");
}
}
public class Fighter
{
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<Fighter>();
Fighter you = new Fighter();
container.BuildUp(you);
you.AK47.Fire(); //"砰砰砰
Console.Read();
}
}
public class Gun
{
public void Fire()
{
Console.WriteLine("砰砰砰");
}
}
public class Fighter
{
[Dependency]
public Gun AK47 { get; set; }
}
public Gun AK47 { get; set; }
}
3、使用Dependency很方便,但是如果Fighter类不是你写的,而是来自第三方类库,那么没有办法加此特性,需要使用运行时的属性注入InjectionProperty
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<Fighter>(new InjectionProperty("AK47")); //可以接受多个InjectionProperty
Fighter you = new Fighter();
container.BuildUp(you);
you.AK47.Fire();
Console.Read();
}
}
public class Gun
{
public void Fire()
{
Console.WriteLine("砰砰砰");
}
}
public class Fighter
{
public Gun AK47 { get; set; }
}
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<Fighter>(new InjectionProperty("AK47")); //可以接受多个InjectionProperty
Fighter you = new Fighter();
container.BuildUp(you);
you.AK47.Fire();
Console.Read();
}
}
public class Gun
{
public void Fire()
{
Console.WriteLine("砰砰砰");
}
}
public class Fighter
{
public Gun AK47 { get; set; }
}
4、结束语
如果在Fighter中定义两个属性,一个使用Dependency特性注入,另一个使用运行时注入,则使用Dependency特性注入的属性将会失败