我试图建立自己的控制容器的反转。现在我与他们的类型的对象存储在一个字典,当问及解决的参考。但我想有可能解决的引用或一个新的实例。我可以创建Activator类的新实例。但是,如果该对象的构造函数来解决需要1,2或任何参数?

例如,我想可以说是这样的:

Container.register<IFoo>(new Foo(Proxy));
Container.register<IBar>(new Boo(Proxy, DataThing));

和解决它像

IFoo MyFoo = Resolver.resolve<IFoo>();
IBar MyBar = Resolver.resolve<IBar>();

其中MyFoo获取与给定参数实例化的代理和MyBar与代理 DataThing

这是什么决心的必须做的,做到这一点?

有帮助吗?

解决方案 2

我决定它在对方法拆分。下决心,那还给储存在容器中的实例。和创建实例化一个新的实例。

是这样的:

 public T Create<T>()
         {
             if (registeredTypes.ContainsKey(typeof(T)))
                 return (T)Activator.CreateInstance(registeredTypes[typeof(T)].
                                                                       GetType());
             else
                 throw new DependencyResolverException("Can't
                                       create type. Type " + typeof(T) + "
                                                           not found.");
         }

其他提示

http://funq.codeplex.com 。这是一个使用lambda表达式来定义函数来解决一个非常小的容器。处理多个参数。

激活可以创建具有参数构造一个类的实例。

有一个在此重载的CreateInstance方法的。

可以提供自定义粘合剂以搜索手动匹配的构造。

在您的情况下的决心方法应该返回参照注册的类的一个实例(新啵(代理,DataThing)在你的例子)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top