- PR -

複数プロジェクトでのグローバル変数

投稿者投稿内容
みのひき
常連さん
会議室デビュー日: 2003/07/17
投稿数: 26
投稿日時: 2003-12-08 10:18
お世話になっております。

皆様、返信ありがとうございます。
非常に助かっています。

私のやりたかったことはプロジェクトAで作成したクラスを
プロジェクトBで使用したいという事であり、これは具体的に
いいますと、ログインユーザの情報をプロジェクトAで作成している
のですが、この情報はアプリケーション全体で共通に使用したい為、
プロジェクトB(パッケージのカスタマイズ部分)で参照しようと
していたのです。

ただ、皆様の意見を聞いていると、設計の段階から見直さないと根本的な
解決にはならないのかもしれません・・・。

もともと全てを同じプロジェクトで作っており、一通り動作確認まで
終わってから、カスタマイズ部分を別プロジェクトにしようとしたのが
まずかったですね。

Jittaさんに紹介していただいたサンプルを使うと
ログイン情報はプロジェクトBで参照することができました。

この方法で進めていこうか、あるいは他のやり方で再設計して
行うか、まだ決めきれていません・・・。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-08 10:54
引用:

みのひきさんの書き込み (2003-12-08 10:18) より:

私のやりたかったことはプロジェクトAで作成したクラスを
プロジェクトBで使用したいという事であり、これは具体的に
いいますと、ログインユーザの情報をプロジェクトAで作成している
のですが、この情報はアプリケーション全体で共通に使用したい為、
プロジェクトB(パッケージのカスタマイズ部分)で参照しようと
していたのです。


 私は「共通クラス」を作って、そこで定義していますよ。で、オブジェクトはセッション変数に入れています。そうすると、全てのプロジェクトは共通クラスを参照し、セッション変数からインスタンスを取り出せばよく、プロジェクトのインスタンス同士で受け渡しをする必要がなくなります。
みのひき
常連さん
会議室デビュー日: 2003/07/17
投稿数: 26
投稿日時: 2003-12-08 11:40
お疲れ様です。

Jittaさん、早々にお返事いただきありがとうございます。

セッション変数というのはVB.NETではどれにあたるのでしょうか?

Jittaさんに紹介していただいたサンプルで言うと
『CommonLibrary』にあたるのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-08 13:29
引用:

みのひきさんの書き込み (2003-12-08 11:40) より:

セッション変数というのはVB.NETではどれにあたるのでしょうか?



 ごめんなさい、別のスレッドと混同してました。「セッション変数」を「アプリケーション変数」に改めます。詳細はMSDNを見てください。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2003-12-08 15:50
引用:

私のやりたかったことはプロジェクトAで作成したクラスを
プロジェクトBで使用したいという事であり、これは具体的に
いいますと、ログインユーザの情報をプロジェクトAで作成している
のですが、この情報はアプリケーション全体で共通に使用したい為、
プロジェクトB(パッケージのカスタマイズ部分)で参照しようと
していたのです。



Aのクラスをsingletonクラスとして実装し、
コンストラクタをプライベートにして、
スタテックInstanceプロパティを通して
BからAのクラスのインスタンスにアクセス
するというのはいかがでしょうか?

補足〜VB.NETへ適当に書換えて下さい。
この例は.NET SDKを使っていますが、VisualStudioに移行可能と思います。

// file : A.cs ----------
using System;
class Astart
{
 public static void Main()
 {
  int userid = A.Instance.userinfo;
  Console.WriteLine("Call from A: {0}", userid);
 # if FIRSTCOMPILE != true
  B testB = new B();
  C testC = new C();
 # endif
  Console.ReadLine();
 }
}

//singleton pattern
public class A
{
 public readonly int userinfo;
 private A()
 {
  userinfo = 12345;
 }
 public static A Instance
 {
  get
  {
   if(a == null) a = new A();
   return a;
  }
 }
 private static A a = null;
}

// file : B.cs ----------
using System;
public class B
{
 public readonly int userid;
 public B()
 {
  userid = A.Instance.userinfo;
  Console.WriteLine("Call from B: {0}", userid);
 }
}

// file : C.cs ----------
using System;
public class C
{
 public readonly int userid;
 public C()
 {
  userid = A.Instance.userinfo;
  Console.WriteLine("Call from C: {0}", userid);
 }
}

rem build.bat ----------
echo off
echo building files...
cls

echo building A.exe for the 1st time ...
csc /define:FIRSTCOMPILE A.cs

echo building B.dll...
csc /r:A.exe /t:library /out:B.dll B.cs

echo building C.dll...
csc /r:A.exe /t:library /out:C.dll C.cs

echo building A.exe...
csc /r:B.dll;C.dll A.cs

echo Done!

[ メッセージ編集済み 編集者: iStation 編集日時 2003-12-12 12:04 ]

スキルアップ/キャリアアップ(JOB@IT)