首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AutoFac -如何注册和解析带参数的对象?

AutoFac -如何注册和解析带参数的对象?
EN

Stack Overflow用户
提问于 2016-07-21 17:01:30
回答 1查看 1.5K关注 0票数 1
代码语言:javascript
运行
复制
public class FooController : ApiController
{
   private IDb db;
    public FooController (IDb context)
    {
        db = context;
    }

    public void DoSomething(string value)
    {
        var output = new DoSomethingElse(value);
    }
}

这个类中有几个方法使用了DoSomethingElse对象,但并不是所有方法都需要这个对象。如何注册和解析DoSomethingElse

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 17:32:00

我所理解的问题是:

代码语言:javascript
运行
复制
public class FooController : ApiController
{
   private IDb db;
    public FooController (IDb context)
    {
        db = context;
    }

    public void DoSomething(string value)
    {
        var output = new DoSomethingElse(value);
    }
}

您不希望在每次实例化FooController时都实例化DoSomethingElse类型。您还希望在运行时为其提供一个值。

因此,这需要工厂模式:

代码语言:javascript
运行
复制
public interface IDoSomethingElseFactory
{
    IDoSomethingElse Create(string value);
}

public class DoSomethingElseFactory : IDoSomethingElseFactory
{
    public IDoSomethingElse Create(string value)
    {
        // Every call to this method will create a new instance
        return new DoSomethingElse(value);
    }
}

public class FooController : ApiController
{
    private IDb db;
    private readonly IDoSomethingElseFactory doSomethingElseFactory;

    public FooController (
        IDb context,
        IDoSomethingElseFactory doSomethingElseFactory)
    {
        db = context;
        this.doSomethingElseFactory = doSomethingElseFactory;
    }

    public void DoSomething(string value)
    {
        // this will be the point at which a brand new
        // instance of `DoSomethingElse` will be created.
        var output = doSomethingElseFactory.Create(value);
    }
}

然后注册以下内容:

代码语言:javascript
运行
复制
builder.RegisterType<DoSomethingElseFactory>()
       .As<IDoSomethingElseFactory>()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38499628

复制
相关文章

相似问题

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