.net 团结还是决心?
我想知道我什么时候用积木,什么时候用决心,什么时候用团结 我什么时候叫拆卸.net 团结还是决心?,.net,unity-container,ioc-container,.net,Unity Container,Ioc Container,我想知道我什么时候用积木,什么时候用决心,什么时候用团结 我什么时候叫拆卸 感谢当您希望Unity容器构造实例(在您需要时创建一个新实例或一个预先存在的单例实例)时,使用Resolve,注入其依赖项并将对象的引用交给您 当您已经有了对象的实例,并且希望容器只解析和注入其依赖项时,可以使用构建 拆卸与堆积相反。您可以将对象传递给容器的Teardown方法,以关闭/清理/任何您想要的内容。现有的容器行为在拆卸时不起任何作用,但是可以编写扩展来利用这一点。您还可以使对象实现IDisposable,当对
感谢当您希望Unity容器构造实例(在您需要时创建一个新实例或一个预先存在的单例实例)时,使用Resolve,注入其依赖项并将对象的引用交给您 当您已经有了对象的实例,并且希望容器只解析和注入其依赖项时,可以使用构建 拆卸与堆积相反。您可以将对象传递给容器的Teardown方法,以关闭/清理/任何您想要的内容。现有的容器行为在拆卸时不起任何作用,但是可以编写扩展来利用这一点。您还可以使对象实现IDisposable,当对象本身被释放时,容器将对其调用Dispose()
IMyService service = container.Resolve<MyService>(); // New service or pre-existing singleton
IMyService service = GetMyService(); // Get the instance from some source
container.BuildUp(service); // Inject dependencies
container.Teardown(service); // Clean-up
IMyService service=container.Resolve();//新服务或预先存在的单例
IMyService service=GetMyService();//从某个源获取实例
容器。堆积物(服务);//注入依赖项
容器。拆卸(服务);//清理
听了拉法的话,很明显,与Resolve()
building()
不同的是,它对注射没有帮助。一种常见的情况是,当您在外部某处创建对象时,将其作为参数传递并在内部构建。(外部和内部与方法体有关。)此外,您可能需要调用Teardown()
来清理对象,并将其还原为作为参数传递之前的状态。但是,请注意,由于Unity内置的Teardown()
不起任何作用,因此它是一种适合覆盖的占位符
示例可能是打印机对象。创建一个后,每次注入不同的页眉/页脚时,都会在许多其他方法中调用它:
public class Decorations
{
public string Header { get; set; }
public string Footer { get; set; }
}
public class Printer
{
internal void Print(string message)
{
Console.WriteLine("HEADER: {0}", this.Decorations != null
&& this.Decorations.Header != null
? this.Decorations.Header
: string.Empty);
Console.WriteLine(message);
Console.WriteLine("FOOTER: {0}", this.Decorations != null
&& this.Decorations.Footer != null
? this.Decorations.Footer
: string.Empty);
}
[Dependency]
public Decorations Decorations { get; set; }
}
public class ClassA
{
public void Print(Printer printer, IUnityContainer container)
{
container.BuildUp(printer);
printer.Print("Hello from ClassA");
container.Teardown(printer);
}
}
public class Program
{
private static void Main(string[] args)
{
var printer = new Printer();
var containerA = new UnityContainer();
containerA.RegisterInstance(new Decorations {
Header = "I am HEADER from Decorations #1",
Footer = "I am FOOTER from Decorations #1" });
var containerB = new UnityContainer();
containerB.RegisterInstance(new Decorations {
Header = "--- I am HEADER from Decorations #2 ---",
Footer = "--- I am FOOTER from Decorations #2 ---" });
var a = new ClassA();
a.Print(printer, containerA);
a.Print(printer, containerB);
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}