0

我正在使用autofac。到目前为止,我通过构造函数注入解决了所有依赖项。

有一种情况我被卡住了:

考虑给定的客户类别:

public class Customer : ICustomer
{
    public string Name { get; set; }

    private int ExternId { get; set; }

    public IExternalIdProvider externalIdProvider { get; set; }

    public Customer()
    {
            this.externalIdProvider = new ConcreteIdProvider(this);
    }

    public BevorSave()
    {
        this.ExternId = externalIdProvider.GetNextId();
    }
}

为了根据请求或 gui 操作创建新的客户对象。我使用新的运算符。但是 - 我想注入的 CustomerClass 中有一个 IdProvider。(作为财产)。

如果客户将由 ioC 容器解决,我将使用如下配置:

builder.RegisterType<ConcreteIdProvider>().As<IExternalIdProvider>();
builder.RegisterType<Customer>().As<ICustomer>()
       .OnActivated(ae =>
            {
              IExternalIdProvider idProvider = 
                ae.Context.Resolve<IExternalIdProvider>(TypedParameter.From(ae.Instance));
              ae.Instance.externalIdProvider = idProvider;
            });

我的问题是:如何在客户中注入 ExternalIdProvider 的行为?(使用自动法)

本文展示了一个示例,如何使用服务定位器完成此操作:http: //blogs.msdn.com/b/simonince/archive/2008/06/30/dependency-injection-is-dead.aspx

谢谢你的帮助。

4

1 回答 1

0

您应该重新考虑对您的实体有行为。在您的实体中存在行为会迫使您对它们进行依赖注入,这会导致您已经注意到的尴尬情况。看看这个相关的 SO question 和 Mark Seemann's great answer

因此,不要对Customer类进行这些操作,而是将它们移动到存储库类。其他要查看的模式是工作单元命令查询

于 2012-04-07T09:25:58.157 回答