3

複数のコンストラクターを持つアセンブリ型を登録したい Autowiring が間違ったコンストラクターを選択し、RegisterType で行うようにそれを指定したい

builder.RegisterType(typeof(IController))
    .UsingConstructor(typeof(IUnitOfWork));

しかし、私がこれを行うとき

builder.RegisterAssemblyTypes(typeof(IController).Assembly)
    .UsingConstructor(typeof(IUnitOfWork));

私は得る

「タイプ 'System.Object' に一致するコンストラクターが存在しません。」

これは、アセンブリ型が思ったよりも少し複雑であることが原因だと思いますが、問題は未解決のままです

私は何をすべきか?

4

1 に答える 1

7

By doing

builder.RegisterType(typeof(IController))
       .UsingConstructor(typeof(IUnitOfWork));

You register IController inside Autofac container and tell it that it should use a constructor with a IUnitOfWork parameter.

The UsingConstructor method doesn't work with RegisterAssemblyTypes but in your case you can use FindConstructorWith method.

builder.RegisterAssemblyTypes(typeof(IController).Assembly)
       .FindConstructorsWith(t => new[] { 
           t.GetConstructor(new[] { typeof(IUnitOfWork) }) 
       })
       .As<IController>();
于 2015-05-19T21:09:23.777 に答える