8

ソリューション全体で発生する CLS 準拠のエラーをすべて排除しようとしています。私はいくつかを整理することができましたが (たとえば、アンダースコアで始まり、符号なし整数を使用するパブリック変数)、それらが失敗する理由を見つけることができないように見えるものもいくつかあります。

問題の 1 つに関連するすべてのコードを貼り付けました。かなりの量のコードがありますが、フォーム コンストラクター、インターフェイス、およびインターフェイスを実装するクラスのみで構成されています。

VB.Net フォーム コンストラクター (警告はunitOfWorkパラメーターにあり、Type of parameter 'unitOfWork' is not CLS-compliantを読み取ります:

Public Sub New(ByRef unitOfWork As IUnitOfWork)

    MyBase.New()
    InitializeComponent()

    _unitOfWork = unitOfWork

End Sub

インターフェイスIUnitOfWorkは次のとおりです。

public interface IUnitOfWork : IDisposable
{
    bool IsInTransaction { get; }

    bool IsDirty { get; }

    object BeginTransaction();

    object BeginTransaction(IsolationLevel isolationLevel);

    void Commit();

    void Rollback();

    object Session { get; }
}

インターフェイスの唯一無二の実装 (したがって、フォーム コンストラクターに渡されるインスタンス) は次のとおりです。

public class UnitOfWork : IUnitOfWork
{
    private ISession _session;

    public UnitOfWork(SMSession session)
    {
        if (session == null)
        {
            throw new ArgumentNullException("Session wasn't supplied");
        }

        this._session = (ISession)session.OpenSession();
    }

    public bool IsInTransaction
    {
        get { return this._session.Transaction.IsActive; }
    }

    public bool IsDirty
    {
        get { return this._session.IsDirty(); }
    }

    public object Session
    {
        get { return this._session; }
    }

    public object BeginTransaction() 
    {
        return this._session.BeginTransaction(IsolationLevel.ReadCommitted);
    }

    public object BeginTransaction(IsolationLevel isolationLevel) 
    {
        return this._session.BeginTransaction(isolationLevel);
    }

    public void Commit()
    {
        if (this._session.Transaction == null)
        {
            throw new NullReferenceException
                ("The Transaction has not been initialised");
        }

        this._session.Transaction.Commit();
    }

    public void Rollback()
    {
        if (this._session.Transaction == null)
        {
            throw new NullReferenceException
                ("The Transaction has not been initialised");
        }

        this._session.Transaction.Rollback();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                this._session.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        if (this._session != null)
        {
            this._session.Dispose();
        }

        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

私はこの問題を認識していないか (何年も前からこの問題を見つめていたので、その可能性があります!)、または私が気付いていない別の CLS 準拠の制限があります。助言がありますか?

4

1 に答える 1