シンプルなシナリオ
public interface IFoo
{
int GetData();
}
public class Foo : IFoo
{
[CacheResult]
public int GetData() { .... }
}
public class MyController
{
[Dependency]
IFoo Foo {get; set;}
}
インターフェイスを手動で登録すると、MyController の解決がうまくいきます。
container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager(),
new InterceptionBehavior<PolicyInjectionBehavior>(),
new Interceptor<InterfaceInterceptor>());
var controller = container.Resolve<MyController>();
自動登録を使用しようとすると:
container.RegisterTypes(
AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default,
WithLifetime.ContainerControlled,
getInjectionMembers: t => new InjectionMember[]
{
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<PolicyInjectionBehavior>(),
});
var controller = container.Resolve<MyController>();
渡された Type はインターフェイスでなければならないため、解決は ResolutionFailedException で失敗します。もちろん、インターフェイスにすれば機能しますが、Controller という名前の場合のみです。MyController や SqlController などを呼び出すと、インターフェイスを解決できないため、マッピングは失敗します。
Springフレームワークと同様に、アセンブリスキャンを実行したいと思っていましたが、理解できませんでした。
私は何が欠けていますか?それともUnityではできないのでしょうか?