c# - CaSTLe Windsor 注册类带有构造函数参数

标签 c# castle-windsor

我有以下类(class):

public class DatabaseFactory<C> : Disposable, IDatabaseFactory<C> where C : DbContext, BaseContext, new()
{
    private C dataContext;
    private string connectionString;

    public DatabaseFactory(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public C Get()
    {
        return dataContext ?? (dataContext = Activator.CreateInstance(typeof(C), new object[] {connectionString}) as C);
    }

    protected override void DisposeCore()
    {
        if (dataContext != null)
            dataContext.Dispose();
    }
}

当我尝试启动 web api 时,出现以下错误:

无法创建组件 'MyApp.DAL.Implementations.DatabaseFactory'1',因为它需要满足依赖关系。 'MyApp.DAL.Implementations.DatabaseFactory'1' 正在等待以下依赖项: - 未提供的参数“connectionString”。是不是忘记设置依赖了?

如何正确注册,如何在运行时传递参数?

最佳答案

需要注册构造函数参数:

container.Register(
    Component.For<IDatabaseFactory>().ImplementedBy<DatabaseFactory>()
             .DependsOn(Dependency.OnValue("connectionString", connectionString))
    );

关于c# - CaSTLe Windsor 注册类带有构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243543/

相关文章:

c# - 国际奥委会 : CaSTLe Windsor and WebAPI

c# - 如何将变量数据传递到 .NET MAUI GraphicsView Canvas 中

c# - 两个具有相同命名空间的不同 DLL

c# - CaSTLe Windsor 组件注册上下文中的 "ForwardedTypes"是什么?

.net - 在 .NET 中修复 dll 版本问题的提示

entity-framework - 每个请求的 Windsor 和 DbContext - DbContext 已被处理

javascript - 如何从 C# 代码访问 Javascript 中的值?

c# - 为 IDAutomationHC39M 创建 2 位条码但不扫描

c# - 从 Web 服务读取 XML 或对象

asp.net-mvc - Multi-Tenancy w/NHibernate+CaSTLe Windsor(单个应用程序,多个数据库)