【问题标题】:Using Autofac for WebForms and n-tier architecture将 Autofac 用于 WebForms 和 n 层架构
【发布时间】:2013-03-14 03:49:25
【问题描述】:

我正在将单元测试引入现有的网络表单应用程序。我正在使用起订量和 Autofac。我试图将代码更改保持在最低限度,但需要实施单元测试。

所以我有一个表示组件、一个业务层和一个数据访问层。我的业务层如下所示:

public class EmployeeBL
{
    public Employee SelectById(int id)
    {
        return new EmployeeDA().SelectById(id);
    }
}

我的数据访问权限如下所示:

public class EmployeeDA
{
    // unitOfWork defined in the constructor

    public Employee SelectById(int id)
    {
        return unitOfWork.Employees.Where(e => e.id == id);
    }
}

Autofac 的 webforms 程序集允许您声明公共属性并指定 web.config 设置以通过 HttpModule 自动注入依赖项。为了测试EmployeeBL,我对web.config 进行了更改并将EmployeeDA 声明为属性:

// Modified for testing
[InjectProperties]
public class EmployeeBL
{
    // public property to allow Autofac property injection
    public IEmployeeDA EmployeeDA { get; set; }

    public Employee SelectById(int id)
    {
        return EmployeeDA.SelectById(id);
    }
}

这适用于运行 webforms 应用程序,但问题是我需要独立于 webforms 实例对业务层进行单元测试。我想在我的EmployeeBL 上保留[InjectProperties] 属性,但我无法通过文档告诉我如何让EmployeeDA 注入其属性。

public class EmployeeBLTest
{
    private static IContainer { get; set; }

    [TestInitialize]
    public void Initialize()
    {
        var builder = new ContainerBuilder();

        // Use my fake employeeDA for testing
        builder.RegisterType<FakeEmployeeDA>().As<IEmployeeDA>();

        // Something magical happens 
    }

    [TestMethod]
    public void SelectByIdTest(int id) { /* testing stuff */ }

}

【问题讨论】:

    标签: inversion-of-control webforms autofac


    【解决方案1】:

    怎么样:

    builder.RegisterType&lt;EmployeeDA&gt;().AsSelf().PropertiesAutowired();

    请看这里: http://code.google.com/p/autofac/wiki/PropertyInjection

    【讨论】:

    • 我应该注意我修复了 TestInitialize 部分,但是不,这不起作用。 HTTPModule AttributedInjectionModule 负责为应用程序注入正确的依赖项,但 builder.RegisterType().AsSelf().PropertiesAutoWired() 不会在未在 HTTPApplication 实例中运行的单元测试中为我的 IEmployeeDA 注入 FakeEmployeeDA .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2011-02-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多