我正在使用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 Container解决,我将使用如下配置:
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的行为? (使用autofac)
本文展示了一个示例,如何使用服务定位器完成此操作: http://blogs.msdn.com/b/simonince/archive/2008/06/30/dependency-injection-is-dead.aspx
感谢您的帮助。
答案 0 :(得分:0)
您应该重新考虑在您的实体上行为。在你的实体中有行为迫使你对它们进行依赖注入,这会导致你已经注意到的尴尬局面。看看this related SO question and Mark Seemann's great answer。
因此,不要在Customer
类上进行这些操作,而是将它们移到repository类。要查看的其他模式包括unit of work,commands和queries。