我做以下,现在如何注册一个在SimpleInjector中具有比TService更多类型参数的TImpl?
container.Register<IDatabaseMapper<User>, DatabaseMapper<User, OracleException>>();
container.Register<IDatabaseMapper<Desk>, DatabaseMapper<Desk, OracleException>>();
container.Register<IDatabaseMapper<Commodity>, DatabaseMapper<Commodity, OracleException>>();
但我想这样做
container.RegisterOpenGeneric(typeof(IDatabaseMapper<>), typeof(DatabaseMapper<,OracleException>));
这在某种程度上可能吗?
'的typeof(DatabaseMapper <,OracleException>)' 没有表明在编译时任何错误,所以我错误地认为它应该工作。你的方法工作,但是这正是我想避免 - 一个数据库供应商特定的异常创建一个类,而不是提供类型为AA参数 – mrt181 2012-03-05 07:58:55
这样'DatabaseMapper:IDatabaseMapper 其中TEntity:类,IEntity 其中TException:DbException' –
mrt181
2012-03-05 08:05:59
创建额外的类通常不是问题,尤其是当您将该类放到容器的配置附近时。在这种情况下,它对应用程序是不可见的,只是你的[Composition Root]的一部分(http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx)。重新考虑将此解决方案放在更复杂(但有趣)的'ResolveUnregisteredType'上。 – Steven 2012-03-05 08:59:07