首页 > 解决方案 > 我可以传递一个组件来注册到 Autofac 模块吗?

问题描述

我有一个模块,这个模块有一个接口,消费应用程序需要实现。

我想将该实现传递回我的模块,以便在 Module.load() 方法中进行注册。

我希望传入具有特定基本类型的类型。(我也不确定这是否可能)

如果模块用户忘记注册接口组件,我希望这会给我一个编译时错误。

标签: dependency-injectionautofac

解决方案


我一直在寻找的答案最终使用了泛型,我不熟悉的 C# 部分是 Where 子句,它允许您指定父级。TAppUSerQuery 是我可以在我的 Autofac 配置中使用的变量。

我的班级标题看起来像这样

public class AuthConfigurationModule<TAppUserQuery> :Module
    where TAppUserQuery : IAppUserQuery

我的 Autofac 加载函数看起来像这样。

    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<TAppUserQuery>().As<IAppUserQuery>();
        builder.RegisterType<ResolveApplicationUser>().As<IResolveApplicationUser>();
        builder.RegisterType<AuthUserRepository>()
            .As<IAuthUserRepository>()
            .WithParameter(new TypedParameter(typeof(string), _connection));
    }

推荐阅读