相关疑难解决方法(0)

依赖注入(DI)"友好"库

我正在思考一个C#库的设计,它将有几个不同的高级函数.当然,这些高级功能将尽可能使用SOLID类设计原则来实现.因此,可能存在供消费者定期直接使用的类,以及作为那些更常见的"最终用户"类的依赖性的"支持类".

问题是,设计库的最佳方法是:

  • DI不可知 - 虽然为一个或两个常见的DI库(StructureMap,Ninject等)添加基本的"支持"似乎是合理的,但我希望消费者能够将该库与任何DI框架一起使用.
  • 非DI可用 - 如果库的使用者没有使用DI,那么库应该仍然尽可能容易使用,减少了用户为创建所有这些"不重要"的依赖关系而必须完成的工作量.他们想要使用的"真实"类.

我目前的想法是为常见的DI库提供一些"DI注册模块"(例如,一个StructureMap注册表,一个Ninject模块),以及一个非DI的集合或工厂类,并包含与这几个工厂的耦合.

思考?

c# dependency-injection inversion-of-control

227
推荐指数
2
解决办法
4万
查看次数

我应该如何设计一个允许IoC的类库,但不依赖于特定的容器

我正在开发一个类库,它将在许多不同的Web应用程序中使用,甚至可能作为开源项目提供.有几点我想使用IoC,但我不希望类库的使用者必须使用一个特定的实现.设计这个库的最佳方法是什么,以便它具有IoC的优点,但不依赖于一个IoC框架?

具体来说,此库包含依赖于各种服务接口的ASP.NET MVC控制器.我知道我可以创建一个IoCControllerFactory,但我不确定这是否是最好的方法,因为一些用户可能无法或不想在他们的应用程序中使用它只是为了获得我的库提供的功能.

.net asp.net inversion-of-control

8
推荐指数
1
解决办法
1015
查看次数

我应该封装我的IoC容器吗?

我正在尝试决定是否有必要通过额外的努力来封装我的IoC容器.经验告诉我,我应该在我的应用程序和任何第三方组件之间放置一层封装.我只是不知道这是否接近矫枉过正.

我可以想到我可能想要切换容器的情况.例如,我目前的容器不再维护,或者证明不同的容器更轻,性能更好,更符合我的需要.如果发生这种情况,那么我可能需要进行大量的重新布线.

为了清楚起见,我正在考虑封装类型的注册解决方案.我认为封装解决方案是明智的 - 我希望通常的做法是将helper/util类委托给容器.

编辑:

假设我更喜欢以编程方式为类型安全,编译时检查和可重构性连接我的类型.这是代码和它的,我正在寻找保护自己从容器上的依赖.

我也一直在为其他几个共享很多相同关系的项目使用IoC容器,但容器很难处理,所以我想要改变.但是,更改意味着我失去了注册码的可重用性.因此,为什么我正在考虑封装.这不是一个巨大的负担,但我会喜欢减轻负担.

我期待:

  • 最大限度地减少容器/容器版本更改的影响
  • 在可能使用不同容器的项目中提供某种级别的类型注册一致性
  • 提供对我有意义的接口方法(RegisterSingleton <T,T>而不是RegisterType <T,T>(SomeLifetimeProvider) - 以Unity为例).
  • 随着条件/可伸缩性要求的改变而增加容器,例如在解析/注册期间添加更好的缓存,日志记录等.
  • 提供我自己的模型来注册类型映射.
    • 假设我想在程序集/包中创建一堆RegistrationHandler对象,因此我可以轻松地将注册职责分隔到多个类中,并自动拾取这些处理程序,而无需在其他任何地方更改代码.

我意识到这有点主观,所以优点/缺点可能会有所帮助

谢谢!

encapsulation ioc-container

7
推荐指数
1
解决办法
735
查看次数