首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ConnectionString上使用Funq.Container?

如何在ConnectionString上使用Funq.Container?
EN

Stack Overflow用户
提问于 2014-02-16 17:09:52
回答 2查看 447关注 0票数 1

当使用Funq.Container初始化已注册类型时,如何利用连接字符串属性?ServiceStack展示了如何在向IoC容器(Funq.Container)注册类型时包含连接字符串,但我找不到实际使用该连接字符串的任何示例。我想在客户端使用它来为我的内部JsonClient指定基本URI。

这些例子表明:

代码语言:javascript
复制
container.Register(new MyType(c.Resolve<IDependency>(), connectionString));

但是这些例子都没有显示connectionString变量发生了什么变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-16 18:22:17

这个例子的意思是容器将为每个请求创建一个MyType实例。当创建MyType实例时,依赖项IDependency将作为参数传递给MyType的构造函数,connectionString也将作为参数传递。

但是,示例代码需要一个输入参数c

代码语言:javascript
复制
container.Register(c => new MyType(c.Resolve<IDependency>(), connectionString));

connectionString的使用取决于您。您可以在MyType对象中使用它。您可能希望将其公开为公共属性,这样就可以访问它。或者用它和你一起IDependency。通过一个扩展的例子:

代码语言:javascript
复制
public class MyType
{
    private IDependency _someDependency;
    public string ConnectionString { get; private set }

    public MyType(IDependency dependency, string connectionString)
    {
        _someDependency = dependency.SetConnectionString(connectionString); // Assumes this method exists.
        ConnectionString = connectionString;
    }
}

在您的服务中,当MyType自动运行时,您现在可以访问该对象。

代码语言:javascript
复制
public class MyService : Service
{
    public MyType MyType { get; set; }

    public void Get(SomeRequest request)
    {
         string connectionString = MyType.ConnectionString;
    }
}

如果您希望在其他地方解析MyType,则可以使用

代码语言:javascript
复制
MyType myType = HostContext.Container.Resolve<MyType>();
string connectionString = myType.ConnectionString;

我希望这能澄清所有正在发生的事情:connectionString被传递到对象构造函数中,您可以根据需要自由使用它。

票数 2
EN

Stack Overflow用户

发布于 2014-02-16 18:22:45

再查一遍医生。前面的段落显示了一个委托方法,其中要实例化的对象需要一个连接字符串。我认为作者试图建议您可以通过构造函数向对象提供连接字符串(或任何其他需要的参数).

代码语言:javascript
复制
container.Register(c => new MyType(c.Resolve<IDependency>(), connectionString));
container.Register<IMyType>(c => new MyType(c.Resolve<IDependency>(), connectionString));
container.Register(c => CreateAndInitialzeMyType(c.Resolve<IDependency1>(), c.Resolve<IDependency2>));

在本例中,所显示的方法是类的构造函数方法.它可能需要可选的参数。

问题中的文档:IoC容器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21814523

复制
相关文章

相似问题

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