在我的界面包中,当用户想要更改有关艺术家的某些信息时,我会运行以下这段代码:
IArtist artistToChange = ContainerHelper.Container.GetExportedValue<IArtist>();
artistToChange.Load(new Guid("provided guid"));
artistToChange.SomeProperty = newValue;
artistToChange.Update();
作为 Artist 在我的领域中的一个实体,它由必须加载的IUser CreatedBy
&IUser LastAlteredBy
属性组成(想想多对一的关系)。每个实体也有自己的存储库。IArtist 有一个 IArtistRepository ,就像 IUser 一样IUserRepository
。
我的问题如下:如何在维护 IoC 的同时获得IUser
inside of的具体实现的实例(没有不知道具体实现的具体实现)?IArtist.Load()
IArtist
IUser
(为了简单起见,让我们调用CArtist
的具体实现IArtist
,以及CUser
的实现IUser
。)
考虑到这一点,我虽然将容器传递给实体,以便他们也可以请求部件,但我不知道这是否是一个好主意甚至是反模式,主要是因为我使用构造函数注入和我的“CArtist”构造函数看起来像这样:
[ImportingConstructor]
public CArtist(IArtistRepository repository)
{
this.repository = repository;
}
但我不能让容器自己注入类似的东西
[ImportingConstructor]
public CArtist(IArtistRepository repository, CompositionContainer container)
{
this.container = container
this.repository = repository;
}
所以这基本上就是这样......我在这里很迷失......结果证明这是一个寻求帮助/指导的呼声,而不是一个问题本身......
PS:如果需要其他信息,请询问!