Unity IoC似乎默认在解析某个类型时创建对象的新实例。但我的问题是,有一点是明确的,并告诉我的容器,每当我有它解决一个对象类型给我一个新的所述类型的实例?
IE我希望是显式的并强制容器确保每次解析时类型是一个新实例:MyNewObject(或者所有类型)
MyNewObject theInstance = container.Resolve<MyNewObject>();
答案 0 :(得分:2)
是的,可以通过TransientLifetimeManager
轻松配置注册课程时应该有类似
的内容container.Register<IMyNewObject, MyMewObject>(new TransientLifetimeManager());
//or
container.Register<MyMewObject>(new TransientLifetimeManager())
答案 1 :(得分:0)
如果您正确应用IoC原则,您的类会声明其依赖关系,然后容器处理它们的生命周期。例如,您想要获取HttpRequest对象,并且容器句柄提供当前线程本地的对象,或者其他任何内容。
你的代码不应该真正关心它的依赖关系的生命周期,因为它永远不应该负责清理它们或者你有什么(所有这些应该被封装在依赖关系中)本身,并在容器关闭时由容器调用。)
但是,如果您确实需要关心代码是否获得单例实例或相同类型的每个注入实例,我希望通过使用类型系统本身来明确它,就像Guice一样Java容器的Provider
模式。我已经创建了一个Guice风格的IProvider<T>
接口,我用它来做这个,我只是为它们添加了一个简单的静态工厂方法,如下所示:
Provider.Of<Foo>(() => { /* Code to return a Foo goes here */})