首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NancyFx和TinyIoc

NancyFx和TinyIoc
EN

Stack Overflow用户
提问于 2016-05-09 07:29:39
回答 1查看 1.2K关注 0票数 1

我刚开始使用依赖注入,我在理解如何使用nancyFx引导程序和TinyIoc时遇到了问题。我想引用一个依赖,但不能低估它如何做。我似乎在任何地方都找不到正确的信息,或者我只是误解了it.This是我的代码:

代码语言:javascript
复制
  public class Startup1
{
    public void Configuration(IAppBuilder app)
    {
        app.UseNancy();
    }
}

我的界面:

代码语言:javascript
复制
public interface IPerson
{
    string Getname();
}

我的实施:

代码语言:javascript
复制
public class Person : IPerson
{
    public string Name { get; set; }
    public string Getname()
    {
        return Name;
    }
}

我的程序

代码语言:javascript
复制
   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");
        }

    }

我的南希鞋匠:

代码语言:javascript
复制
public class MyNancyBoot : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        //base.ConfigureApplicationContainer(container);
          container.Register<IPerson>(new Person());

    }
}

我的nancyModule:

代码语言:javascript
复制
public class MyNancyModule : NancyModule
{
    public MyNancyModule(IPerson person)
    {
        Get["/"] = _ =>
        {
            var x = TinyIoCContainer.Current.Resolve<IPerson>();
            return "OK";

        };
    }
}

这将返回MyNancyModule中的一个错误。

代码语言:javascript
复制
 var x = TinyIoCContainer.Current.Resolve<IPerson>();

好的,我怎样才能让我的人进入MyNancyModule呢?

EN

回答 1

Stack Overflow用户

发布于 2016-05-09 12:19:26

我想引用一个依赖,但不能低估它如何做。

我觉得这里有几件事要看。

您错误地认为,您需要在控制器构造函数上以某种方式传入您希望从Get"/“控制器操作返回的任何类型。事实并非如此。如果某个服务操作碰巧返回Person类型,则不需要将该person类型注入构造函数。相反,你可以做这样的事情:

代码语言:javascript
复制
Get["/"] = _ =>
    {
        var x = new List<Person>();
        return Response.AsJson(x); 
    };

显然,此服务操作的用途非常有限,因为它总是返回类型为Person的空列表。

所以,你需要的是一种依赖,它能让人。例:

代码语言:javascript
复制
interface IGetPersons
{
    List<Person> GetAll();
}

为了在控制器内使用这一点,微型国际奥委会将需要了解它。这就是你可以在微型国际奥委会注册这种类型的地方。

代码语言:javascript
复制
container.Register<IGetPersons>(); 

这就引出了你所面临的第二件事,那就是国际奥委会是如何运作的。

在nancy中添加隐式注册之后,微型国际奥委会将扫描您的程序集并自动找到IGetPersons的实现!(这是假设有一个单一的实现。如果不止一个,你实际上需要做更多的工作,但这是另一个故事)。

然后,这种魔力允许您修改控制器,如下所示:

代码语言:javascript
复制
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)对框架提供的某种单例进行更改:

代码语言:javascript
复制
container.Register(MefContainer.GetExportedValue<IRemoteAccess>());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37109988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档