空字符串通过Autofac传递给构造函数而不是期望值

时间:2013-11-13 09:27:05

标签: c# autofac

我是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。

帮助? 感谢

1 个答案:

答案 0 :(得分:1)

好的第一件事是你尝试注册不需要的字符串类型(你可以删除那行。

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

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

您可以添加命名参数,以便在解析时指定网址。

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

然后解决你的对象:

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

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

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

然后,你可以解决:

var ws = Container.Resolve<IMyService>();