相关疑难解决方法(0)

MEF是否为Singleton模式提供任何价值?

我正在开发一个MEF项目来发现使用和实现技术.我的第一个发现阶段是实现动态可配置和集中的数据控制器.自定义行为的一种方法是继承我提供的强制执行奇点规则的类.虽然Singleton模式在使用中受到很多诽谤,但我可能已经找到了一种可以在某种程度上验证模式存在困难的实现.

情况

假设主机导入的数据控制模块(DataController)旨在根据兄弟模块的请求为数据库提供公共管道.我只需要一个DataController并作为一个模块组成,DataController必须实现IDataController.DataProvider作为基类的实现纯粹是可选的; 但是,从DataProvider派生需要一些额外的处理.

观察

收集事实:

  • 静态类无法实现或扩展抽象类或接口.仅此事实就消除了使用静态类来确保DataController的单一存在.

  • 实现Singleton模式的DataController将确保每个应用程序域的单一存在.DataController没有限制; 允许继承在Host中导入和编写的必需接口.

  • 给定DataController的推导,Singleton模式的标准实现可能在同样的情况下具有挑战性.建议的数据库提供了可公开访问的类:IDataController和抽象的DataProvider.为了确保派生的DataController的单个实例,实现将需要偏离规范.

解决方案

此时,解决方案似乎很清楚.DataHandler基类实现Singleton模式.我并不天真地认为还有其他方法可以做到这一点.但这是我对如何实现模式的粗略期望:

// DataLibrary referenced by Host
public interface IDataController
{ 
    IDataController Start();
    DbConnection CreateConnection<TDbConnection>(params string[] args)
        where TDbConnection : DbConnection, IDbConnection;
}

public abstract class DataProvider
{

    // singleton implementation
    private static IDataController dcInstance;

    protected static IDataController Instance
    {
        get{ return dcInstance; }
    }
    // ========================

    abstract IDataController CreateController();

    protected IDataController instanceController<TDataController>()
        where TDataController : IDataController, new()
    {
        return new TDataController (); …
Run Code Online (Sandbox Code Playgroud)

c# singleton mef

5
推荐指数
1
解决办法
4114
查看次数

标签 统计

c# ×1

mef ×1

singleton ×1