1

我是autofac的新手,如果我问了一个愚蠢的问题,很抱歉。我无法将参数传递给构造函数

我有以下接口和类:

interface IMyService
{
    string GetVersion();
}

class MyService : webService, IMyService
{
    public MyService(string serverPath)
        : base(serverPath){}

    public string GetVersion() { return "1.0"; }
}

这就是我设置的方式:

public static class AutofacManager
{
    public static IContainer Container { get; set; }

    public static void Configure()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<string>();
        builder.Register<MyService>((c, p) => new MyService(c.Resolve<string>(p))).As<IMyService>();
        Container = builder.Build();
    }
}

我正在使用这样的对象:

var ws = Container.Resolve<IMyService>(Autofac.TypedParameter.From<string>(url));
var ver = ws.GetVersion();

问题是一个空字符串被传递给构造函数。我希望它通过 url varialbe。

帮助?谢谢

4

1 回答 1

1

好的,第一件事是您尝试注册不需要的字符串类型(您可以删除该 lineà.

您可以修改您的委托以匹配以下内容:

builder.Register((c, p) =>
{
    var url = p.Named<string>("url");
    return new MyService(url);
}).As<IMyService>();

您添加一个命名参数,以便您可以在解析时指定 url。

As 将确保注册为接口(否则您注册具体类)。

然后解决你的对象:

string MyUrl = "";
var ws = Container.Resolve<IMyService>(new NamedParameter("url", MyUrl));

编辑:不必每次都使用 url 解析,您还可以允许在注册时设置 url,例如:

string MyUrl = "hello";
builder.RegisterType<MyService>().
WithParameter(new NamedParameter("serverPath",MyUrl)).As<IMyService>(); 

然后,您可以解决为:

var ws = Container.Resolve<IMyService>();
于 2013-11-13T10:11:21.270 回答