我有一個應用程序可能需要連接到多個數據庫。但是每個模塊只會連接到一個分貝。所以我認爲將db分離到每個模塊中可能是有意義的,這樣每個模塊都會自動解析數據庫,並且我不需要爲命名註冊而煩惱。但令我驚訝,似乎Autofac的模塊多的邏輯模塊代碼模塊(我錯了嗎?):IA模塊是Autofac的綁定上下文
[Test]
public void test_module_can_act_as_scope_container()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new Module1());
IContainer c = builder.Build();
var o = c.ResolveNamed<CB>("One");
Assert.That(o.A.Name, Is.EqualTo("One"));
builder = new ContainerBuilder();
builder.RegisterModule(new Module1());
builder.RegisterModule(new Module2());
c = builder.Build();
var t = c.ResolveNamed<CB>("One");
Assert.That(t.A.Name, Is.EqualTo("Two"));
}
和所使用的接口/模塊:
public interface IA
{
string Name { get; set; }
}
public class CA : IA
{
public string Name { get; set; }
}
public class CB
{
public CB(IA a)
{
A = a;
}
public IA A { get; private set; }
}
public class Module1 : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(c => new CA() { Name = "One" }).As<IA>();
builder.RegisterType<CB>().Named("One", typeof(CB));
}
}
public class Module2 : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(c => new CA() { Name = "Two" }).As<IA>();
builder.RegisterType<CB>().Named("Two", typeof(CB));
}
}
接受。 更新前的帖子正是我想要避免的。我也想過更新的版本,但是想知道是否有更好的解決方案。在Autofac可以支持分層模塊之前似乎沒有其他辦法。 Peter的解決方案確實有效,但它太hacky .. – TcMaster 2012-02-02 14:37:41