如何解决与构造函数的参数情况下,在自定义IoC容器?
-
19-08-2019 - |
题
我试图建立自己的控制容器的反转。现在我与他们的类型的对象存储在一个字典,当问及解决的参考。但我想有可能解决的引用或一个新的实例。我可以创建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)在你的例子)
不隶属于 StackOverflow