2

インターフェイスからクラスへのバインディングを登録する代わりに、クラスを登録し、IOC コンテナーにそのクラスに関連付けられたインターフェイスを暗黙的に登録させたいと考えています。特にUnityの答えが必要ですが、IOCコンテナでこれができるかどうか知りたいです。

私が求めているものを明確にするために、次のことに注意してください。

public interface IFred
{
    int Go();
}
public class Fred : IFred
{
    public int Go()
    {
        return 1;
    }
}

class Program
{
    static void Main(string[] args)
    {
        UnityContainer container = new UnityContainer();

        container.RegisterType<Fred>();     //contra-variant registration?
        IFred foo = container.Resolve<IFred>();  //variant resolution?
    }
}

上記の例では、IFred マッピングを明示的に登録していなくても、"Fred" インスタンスが返されるようにします。

4

1 に答える 1

2

私はカップルを知っています(申し訳ありませんがUnityではありません)

オートファック:

ContainerBuilder builder = new ContainerBuilder();
builder
    .RegisterType<Fred>()
    .AsImplementedInterfaces();

そしてウィンザー城:

WindsorContainer container = new WindsorContainer();
container.Register(
    Classes
        .From(typeof(Fred))
        .Pick()
        .LifestyleTransient()
        .WithServiceAllInterfaces());
于 2013-10-28T10:23:32.127 に答える