我是 StructureMap 的新手,遇到以下问题,这似乎与其他人遇到的问题相反。我有一个通用UnitOfWorkClass
定义如下:
public class UnitOfWork<TContext> : IUnitOfWork
where TContext : IContext, new()
{
....
}
但是,如果我对具体实例有几种不同的可能性,我对如何注册这个来解决这个问题感到困惑。
我已经看到很多人们拥有通用接口的例子,例如:
所以我想这个问题可能会被问到我是否也需要重新审视我的设计!
非常感谢!
# 编辑可能的解决方案?所以我有一个类,它将两个参数带入构造函数:
public MyClass(IUnitOfWork firstConstructor,
IUnitOfWork secondConstructor)
{
...
}
然后,随着我的对象图的构建,我执行以下操作:
ObjectFactory.Initialize(cfg =>
{
var firstContext = cfg.For<IContext>().Use<MyFirstContext>();
var secondContext = cfg.For<IContext>().Use<MySecondContext>();
var firstUnitOfWork =
cfg.For<IUnitOfWork>().Use<UnitOfWork<MyFirstContext>>()
.Ctor<IContext>().Is(firstContext);
var secondUnitOfWork =
cfg.For<IUnitOfWork>().Use<UnitOfWork<MySecondContext>>()
.Ctor<IContext>().Is(secondContext);
cfg.For<IMyClass>().Use<MySecondContext>()
.Ctor<IUnitOfWork>("firstConstructor").Is(firstUnitOfWork)
.Ctor<IUnitOfWork>("secondConstructor").Is(secondUnitOfWork);
});
所以我在这里所做的是:
- 解决了我对 IContext 的依赖并将它们存储在变量中
- 将解析的 IContext 注入到我的 IUnitOfWork 构造函数中
- 然后我可以正确解析正确的通用 UnitOfWork 构造函数
感觉不是很完美,但我认为这适合我的需求......