0

我正在尝试构建自己的控制容器反转。现在我将对象及其类型存储在字典中,并在被询问时解析引用。但我想让解析引用或新实例成为可能。我可以使用 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 使用给定参数Proxy和 MyBar 与ProxyDataThing实例化。

决心必须做什么才能做到这一点?

4

3 回答 3

2

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

于 2009-03-07T02:26:27.803 回答
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.");
         }
于 2009-01-27T09:18:40.367 回答
0

Activator 可以创建具有带参数的构造函数的类的实例。

看看CreateInstance方法的这个重载。

您可以提供自定义活页夹来手动搜索匹配的构造函数。

在您的情况下,解析方法应返回对注册类实例的引用(在您的示例中为 new Boo(Proxy, DataThing))

于 2009-01-21T14:11:45.093 回答