3

私はこのクラスを持っています:

public class MessageService
{
    private readonly IMessageSender messageSender;

    public MessageService(IMessageSender messageSender)
    {
        this.messageSender = messageSender;
    }
}

autofacを登録して、コンストラクター内でパラメーターを渡す方法:

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
builder.RegisterType<MandrillMessageSender>().As<IMessageSender>();

builder.RegisterType<MessageService>(new MandrillMessageSender()); // NOTE THIS STRING IS NOT WORKING

したがって、コントローラーコンストラクター内にパラメーターを渡すと、結果は次のように機能するはずです。messageServiceオブジェクトは、MandrillMessageSerderを挿入して作成する必要があります。

public Home(MessageService messageService)
4

1 に答える 1

2

RegisterTypeを呼び出す前に 、すべての呼び出しを行う必要がありますbuilder.Build()

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<MandrillMessageSender>().As<IMessageSender>();
builder.RegisterType<MessageService>();

var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

MessageServiceインターフェイスの実装が1つしかない場合は、登録で何も渡す必要がないことに注意してくださいIMessageSender(Autofacは、MandrillMessageSenderそこに必要なものであると判断します)

于 2013-02-17T13:49:02.190 に答える