我是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。
帮助? 感谢
答案 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>();