我是否有任何方法可以将特定实例作为其中一个依赖项进行组合(或获取导出值)?
我有这样的事情:
public interface IEntityContext
{
IEntitySet<T> GetEntitySet<T>();
}
[Export(typeof(IEntitySet<MyEntity>))]
class MyEntitySet
{
public MyEntitySet(IEntityContext context)
{
}
}
// then through code
var container = ...;
using (var context = container.GetExportedValue<IEntityContext>())
{
var myEntitySet = context.GetEntitySet<MyEntity>();
// I wan't myEntitySet to have the above context constructor injected
}
我试图为可测试性而嘲笑像实体框架这样的东西。不确定我是否想沿着这条路走下去。无论如何,我应该为此目的创建一个新的容器。特定于模拟此IEntityContext
个对象的容器。
答案 0 :(得分:1)
因此,如果我的理解是正确的,您希望能够为您的MyEntitySet实例注入任何可用的IEntityContext吗?
[Export(typeof(IEntitySet<MyEntity>))]
public class MyEntitySet : IEntitySet<MyEntity>
{
[ImportingConstructor]
public MyEntitySet(IEntityContext context)
{
}
}
鉴于您是否想要模拟IEntityContext?如果是这样,你可以这样做:
var contextMock = new Mock<IEntityContext>();
var setMock = new Mock<IEntitySet<MyEntity>>();
contextMock
.Setup(m => m.GetEntitySet<MyEntity>())
.Returns(setMock.Object);
Container.ComposeExportedValue<IEntityContext>(contextMock.Object);
var context = Container.GetExportedValue<IEntityContext>();
var entitySet = context.GetEntitySet<MyEntity>();
(那是使用Moq)
您可以通过添加导出值来使用现有的CompositionContainer基础结构。
这有帮助吗?对不起,你似乎不清楚你要做什么......