我正在尝试构建自己的控制容器反转。现在我将带有类型的对象存储在字典中,并在询问时解析引用。但我希望能够解析引用或新实例。我可以使用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 进行实例化。
解决需要做些什么来实现这一目标?
答案 0 :(得分:2)
结帐http://funq.codeplex.com。这是一个非常小的Container,它使用lambda表达式来定义要解析的函数。处理多个参数。
答案 1 :(得分:1)
我决定将其拆分为方法。一个Resolve,它返回存储在容器中的实例。还有一个创建实例的新实例。
类似的东西:
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.");
}
答案 2 :(得分:0)
Activator可以创建具有带参数的构造函数的类的实例。
看一下CreateInstance方法的重载。
您可以提供自定义binder来手动搜索匹配的构造函数。
在您的情况下, resolve 方法应该返回对已注册类实例的引用(示例中的新Boo(Proxy,DataThing))