StructureMap には、スキャン時に規則を適用する機能があります。したがって、明示的な登録なしで IFoo => Foo です。
AutoFacで利用できる類似のものはありますか? 周りを見回しても、役立つものは何も見つかりません。
ありがとう、
StructureMap には、スキャン時に規則を適用する機能があります。したがって、明示的な登録なしで IFoo => Foo です。
AutoFacで利用できる類似のものはありますか? 周りを見回しても、役立つものは何も見つかりません。
ありがとう、
Autofac2の新しいスキャン機能により、慣例による登録の必要性がいくらか取り除かれます。Plugins.dllFoo
にあるとしましょう:
var assembly = Assembly.Load("Plugins");
builder.RegisterAssemblyTypes(assembly)
.AsImplementedInterfaces();
この登録は、それをピックアップしFoo
て として登録しIFoo
ます。
ContainerBuilder.RegisterTypesMatching を使用できます。次に例を示します。
var builder = new ContainerBuilder();
builder.RegisterTypesMatching(type => type.IsAssignableFrom(typeof(IFoo)));
var container = builder.Build();
var foo = container.Resolve<Foo>();
ピーター、彼が言っているのは、StructureMap で利用できるデフォルトのコンベンション スキャンです。IX と X を自動的にバインドします。ここで、X はインターフェイス IX を実装するクラスです。それはこのように動作します:
public override void Process(Type type, Registry registry)
{
if (!type.IsConcrete()) return;
Type pluginType = FindPluginType(type);
if (pluginType != null && Constructor.HasConstructors(type))
{
registry.AddType(pluginType, type);
ConfigureFamily(registry.For(pluginType));
}
}
public virtual Type FindPluginType(Type concreteType)
{
string interfaceName = "I" + concreteType.Name;
Type[] interfaces = concreteType.GetInterfaces();
return Array.Find(interfaces, t => t.Name == interfaceName);
}
Autofac が同様のことをサポートしているかどうかも知りたいです。StructureMap を使用すると、独自の IRegistrationConvention を定義できます。これはコンベンションの一例です。