标签: funq

如何在ServiceStack.net中使用Funq注册多个IDbConnectionFactory实例

您将如何在Funq中注册不同的IDbConnectionFactory实例,然后直接在您的服务中访问它们?命名实例会以某种方式在这里发挥作用吗?

这是跨服务使用不同数据库时最好的方法吗?

谢谢!

编辑:

一个例子 ;).我可能会离开这里,因为我对IoC很新,但是比如说我有2个独立的数据库连接,我想注入.在ServiceStack中,这是在Global.asax中完成的.

container.Register<IDbConnectionFactory>(c =>
            new OrmLiteConnectionFactory(@"Connection String 1", SqlServerOrmLiteDialectProvider.Instance));                                             

container.Register<IDbConnectionFactory>(c =>
            new OrmLiteConnectionFactory(@"Connection String 2", SqlServerOrmLiteDialectProvider.Instance));                
Run Code Online (Sandbox Code Playgroud)

这两个似乎都注入了谦逊的海鲂.

然后通过以下方式在服务端自动访问它们:

public IDbConnectionFactory DbFactory { get; set; }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它似乎给了我第一个注册.如何访问服务端的特定访问权限?希望这会让它更加清晰.

这是ServiceStack.Examples的完整示例,仅使用1个IDbConnectionFactory: Movies Rest

c# ioc-container inversion-of-control servicestack funq

18
推荐指数
2
解决办法
7697
查看次数

如何在我自己的项目中使用ServiceStack Funq

在工作中,我们在ServiceStack中进行了几个新的Web服务项目,并在其中一些项目中利用了Funq.我目前正在开发一个单独的项目,它将使用所述Web服务,并且想知道我是否有办法在我的项目中使用ServiceStack的Funq来解析我的依赖关系,以便使用我们正在使用的或多或少相同的模式开发我们的Web服务.

这可能吗?

.net servicestack funq

12
推荐指数
2
解决办法
3668
查看次数

Funq是否支持ResolveAll?

Funq IoC容器是否支持解析类型的所有注册?像这两个中的任何一个:

IEnumerable<IFoo> foos = container.Resolve<IEnumerable<IFoo>>();
IEnumerable<IFoo> foos = container.ResolveAll<IFoo>();
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection ioc-container funq

11
推荐指数
1
解决办法
1710
查看次数

Funq IoC Container是否支持属性注入?

我正在寻找一个在我的Compact Framework应用程序中使用的IoC容器.尝试Funq我注意到我找不到用它来进行Property Injection的方法.

我查看了项目网站的讨论和单元测试,但我找不到任何Property Injection的例子.

Funq是否支持Property Injection?

.net dependency-injection compact-framework inversion-of-control funq

6
推荐指数
1
解决办法
1814
查看次数

ServiceStack中的Funq用法

  • 如何Container从控制器中访问实例?
  • 我必须Container.Resolve在我的课堂上使用但是如何访问Container实例?
  • 是单身吗?
  • 我可以使用new Container()或有链接Funq.StaticContainer吗?

感谢Mythz 的主旨提示,a)或b)或c).

我将使用Mythz的解决方案,它被我接受,但有关于它的模式(ServiceLocator模式)的问题,你可以在这里查看额外的信息.

dependency-injection servicestack funq

6
推荐指数
1
解决办法
3825
查看次数

funq的servicestack - 按照惯例自动装配

我有一个服务,它在其构造函数中采用IMyDependency.IMyDependency,MyDependency和服务都存在于同一个程序集中.MyDependency有一个单一的,公共的无参数构造函数.

令我惊讶的是,这不起作用:

container.RegisterAutoWired<IMyDependency>();
Run Code Online (Sandbox Code Playgroud)

它抛出一个"System.NullReferenceException".

如果我这样做,它的工作原理:

container.RegisterAutoWiredAs<MyDependency, IMyDependency>();
Run Code Online (Sandbox Code Playgroud)

但那么,这样做:

container.RegisterAs<MyDependency, IMyDependency>();
Run Code Online (Sandbox Code Playgroud)

那么区别是什么呢?如果"自动布线"找不到具体的实现,并且对于是否可以解决需要依赖性的服务没有区别,那么什么是自动布线?

Funq应该能按惯例找到具体的实现吗?如果是这样的话,那个约定是什么,如果不是同名的话?

谢谢.

dependency-injection inversion-of-control convention-over-configur servicestack funq

6
推荐指数
2
解决办法
4282
查看次数

使用RavenDB和ServiceStack

我读过Phillip Haydon关于如何在ServiceStack中使用NHibernate/RavenDB的这篇文章.
我没有看到关于获取IDocumentStore并在每次我需要db中的内容时打开新会话这一点:

public class FooService : ServiceBase<Foo>
{
    public IDocumentStore RavenStore{ get; set; }

    protected override object Run(ProductFind request)
    {
        using (var session = RavenStore.OpenSession())
        {
            // Do Something...

            return new FooResponse{/*Object init*/};
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能每个请求只使用一个会话,当请求结束时,根据响应状态提交更改或回滚?

如果我的方法很好,我怎么能实现呢?这是我的尝试:

我创建了这个类:

    public class RavenSession : IRavenSession
    {
        #region Data Members

        private readonly IDocumentStore _store;
        private IDocumentSession _innerSession;

        #endregion

        #region Properties

        public IDocumentSession InnerSession
        {
            get { return _innerSession ?? (_innerSession = _store.OpenSession()); }
        }

        #endregion

        #region Ctor

        public RavenSession(IDocumentStore …
Run Code Online (Sandbox Code Playgroud)

ravendb servicestack funq

5
推荐指数
2
解决办法
1471
查看次数

如何在Funq IoC中解决循环依赖?

我有两个课程,我需要互相参考.

class Foo
{
    public Foo(IBar bar) {}
}

class Bar
{
    public Bar(IFoo foo) {}
}
Run Code Online (Sandbox Code Playgroud)

当我做:

container.RegisterAutoWiredAs<Foo, IFoo>();
container.RegisterAutoWiredAs<Bar, IBar>();
Run Code Online (Sandbox Code Playgroud)

当我尝试解决任一接口时,我得到一个循环依赖图,导致无限循环.有没有一种简单的方法可以在Funq中解决这个问题,或者您知道一种解决方法吗?

c# circular-dependency ioc-container servicestack funq

4
推荐指数
1
解决办法
1392
查看次数

ServiceStack - 依赖似乎不会被注入?

我有以下存储库类:

public class Repository<T> : IDisposable where T : new()
{
    public IDbConnectionFactory DbFactory { get; set; } //Injected by IOC
    IDbConnection db;
    IDbConnection Db
    {
        get
        {
            return db ?? (db = DbFactory.Open());
        }
    }

    public Repository()
    {
        Db.DropAndCreateTable<T>();
    }

    public List<T> GetByIds(long[] ids)
    {
        return Db.Ids<T>(ids).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的AppHost.Configure().我像这样注册依赖:

container.Register<IDbConnectionFactory>(c => 
            new OrmLiteConnectionFactory(ConfigurationManager.
       ConnectionStrings["AppDb"].ConnectionString, SqlServerDialect.Provider));

container.RegisterAutoWired<Repository<Todo>>().ReusedWithin(Funq.ReuseScope.None);
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的应用程序时,它似乎是我DbFactory的null并且没有被正确注入,因为我得到一个Null Reference异常.

servicestack funq

4
推荐指数
1
解决办法
1381
查看次数

ServiceStack Funq.Container中相同接口的多个实现

在ServiceStack应用程序中,我将Funq配置为按请求注入会话,如下所示:

container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
  .OpenSession())
  .ReusedWithin(Funq.ReuseScope.Request);
Run Code Online (Sandbox Code Playgroud)

我的服务看起来像这样,它的工作正常:

public class MyNhAwareService : Service
{
   public ISession Session { get; set; }

   public object Any(DoSomething request)
   {
   ...
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我想在其自己的会话工厂中添加第二个NHibernate数据库时,问题就出现了:

container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
   .OpenSession())
   .ReusedWithin(Funq.ReuseScope.Request);
// add a different session factory 
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB2);
Run Code Online (Sandbox Code Playgroud)

我一直在尝试用各种方式Funq可以使用,我想我已经找到了前进的时候,我发现了"RegisterNamed()"方法,但仍然没有帮助,因为我不能用什么除了我的服务中的TryResolve().

这似乎应该是可能的,但是我正在试图解决这个问题.我会非常感激任何建议.

c# nhibernate servicestack funq

3
推荐指数
1
解决办法
1217
查看次数