6

我似乎非常需要这个。

假设我有一个带有构造函数的类,它带有几个参数。其中一些可以通过注册组件来解决。但其余的是在运行时创建的实例(例如从数据库中获取实体)。

Autofac 可以很好地处理这些情况吗?或者我的设计不是最优的?

为了澄清,我的类具有这样的构造函数:

public MyClass(IService1 service1, IService2 service2, Data1 data1, Data2 data2)
{
//...
}

我想做这样的事情:

container.Resolve<MyClass>(data1, data2);

4

2 回答 2

10

你可以通过在 Autofac 容器中注册一个工厂方法来优雅地处理这个问题。您解析工厂方法,然后使用它来创建具有运行时依赖项的实例。您可以通过注册和解析委托或自定义工厂类型来自己完成此操作。但是,Autofac 明确支持委托工厂

没有足够的信息来评论您的设计。我会把它留给你:)

于 2011-06-07T13:21:47.610 回答
4

我会说你的设计是次优的。

你似乎混在了一起。依赖注入(使用容器)应该主要用于将服务组件注入到其他组件中。不要注入实体之类的东西,因为容器不能管理它们的生命周期。相反,注入可以为您管理实体的服务,例如存储库。虽然是讨论的话题,但我不会注入一个工作单元,而是一个创建工作单元的工厂。这样,您的应用程序就可以显式地管理工作单元的生命周期。

于 2011-06-07T19:12:23.693 回答