我刚开始使用依赖注入,我在理解如何使用nancyFx引导程序和TinyIoc时遇到了问题。我想引用一个依赖,但不能低估它如何做。我似乎在任何地方都找不到正确的信息,或者我只是误解了it.This是我的代码:
public class Startup1
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}我的界面:
public interface IPerson
{
string Getname();
}我的实施:
public class Person : IPerson
{
public string Name { get; set; }
public string Getname()
{
return Name;
}
}我的程序
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Bill";
string uri = "http://localhost:8080/";
using (WebApp.Start<Startup1>(uri))
{
Console.WriteLine("Started");
Console.ReadKey();
Console.WriteLine("Stopping");
}
}我的南希鞋匠:
public class MyNancyBoot : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
//base.ConfigureApplicationContainer(container);
container.Register<IPerson>(new Person());
}
}我的nancyModule:
public class MyNancyModule : NancyModule
{
public MyNancyModule(IPerson person)
{
Get["/"] = _ =>
{
var x = TinyIoCContainer.Current.Resolve<IPerson>();
return "OK";
};
}
}这将返回MyNancyModule中的一个错误。
var x = TinyIoCContainer.Current.Resolve<IPerson>();好的,我怎样才能让我的人进入MyNancyModule呢?
发布于 2016-05-09 12:19:26
我想引用一个依赖,但不能低估它如何做。
我觉得这里有几件事要看。
您错误地认为,您需要在控制器构造函数上以某种方式传入您希望从Get"/“控制器操作返回的任何类型。事实并非如此。如果某个服务操作碰巧返回Person类型,则不需要将该person类型注入构造函数。相反,你可以做这样的事情:
Get["/"] = _ =>
{
var x = new List<Person>();
return Response.AsJson(x);
};显然,此服务操作的用途非常有限,因为它总是返回类型为Person的空列表。
所以,你需要的是一种依赖,它能让人。例:
interface IGetPersons
{
List<Person> GetAll();
}为了在控制器内使用这一点,微型国际奥委会将需要了解它。这就是你可以在微型国际奥委会注册这种类型的地方。
container.Register<IGetPersons>(); 这就引出了你所面临的第二件事,那就是国际奥委会是如何运作的。
在nancy中添加隐式注册之后,微型国际奥委会将扫描您的程序集并自动找到IGetPersons的实现!(这是假设有一个单一的实现。如果不止一个,你实际上需要做更多的工作,但这是另一个故事)。
然后,这种魔力允许您修改控制器,如下所示:
public MyNancyModule(IGetPersons personGetter)
{
Get["/"] = _ =>
{
var x = List<Person> personGetter.GetAll(); // Look, don't need to resolve this manually!
return Response.AsJson(x);
};
}微型Ioc将负责将注入的类型解析为IGetPersons实现,然后您可以通过控制器免费使用它。
假设客户端向运行南希服务的win form应用程序发送http帖子。如何从南希服务获取数据到win表单。
请看以下内容:http://weblogs.asp.net/rweigelt/10235654
作者正在使用托管扩展框架(,MEF)对框架提供的某种单例进行更改:
container.Register(MefContainer.GetExportedValue<IRemoteAccess>());https://stackoverflow.com/questions/37109988
复制相似问题